Перейти до основного вмісту

Як приховати wxMediaCtrl

Задача

Вчора переді мною постала цікава задача. Потрібно було приховати wxMediaCtrl, який займається програванням відео на формі. Взагалі, оскільки в wxPython все, що малюється, є вікном (window), переглянув методи wxWindow.

В лоб

Ну, логічно, що для приховання знадобиться метод Hide(), але тут-то і виявились граблі. Hide() дійсно ховає контрол, для чого він і призначений, але, з іншого боку, ламає позиціювання у всіх сайзерах, через що в мене всі інші контроли попливли. Звісно, якщо сайзери відсутні, і все позиціювання виконується в абсолютних координатах - ніяких проблем, Hide() підійде, але в моєму випадку - ні.

Неочікуване рішення

Переробляти все не хотілось, хоча і форма в мене, в принципі не ресайзиться, тому методом научного тика виявив, що проблему можна вирішити використанням методу Freeze(). Відповідно, обернений результат досягається методом Thaw().

Чому рішення неочікуване? Тому що я ніяк не очікував, що після виклику Freeze() контрол стане невидимим, власне, якщо звернутись до реалізації Freeze(), то можна виявити, що він попереджує будь-яку візуальні зміни об'єкта, незважаючи на роботу, яка над ним виконується.

Freeze

Сам по собі метод Freeze() цікавий тим, що дозволяє оптимізувати роботу вікон на етапі візуалізації. Наприклад, перед вставкою великої кількості елементів в комбо-бокс, варто йому зробити Freeze(), а після, - Thaw(). Таким чином, поки елементи вставляються, виклики перемалювання виконуватись не будуть.

Коментарі

Популярні дописи з цього блогу

Регулярні вирази в Python: вивчення та оптимізація

Writing a regular expression is more than a skill -- it's an art. Jeffrey Friedl Що це таке? Рано чи піздно майже кожному програмісту в своєму житті доводиться стикатись з регулярними виразами. Термін "Регулярні вирази" є перекладом з англійської словосполучення "Regular expressions" і не є зовсім точним, а для тих, хто перший раз почув цей термін, мабуть, навіть спантеличуючим (я, наприклад, коли вперше почув, ніяк не міг собі второпати по назві, хоча б приблизно, що це, і для чого використовується). Літературний і більш осмислений переклад звучав би, мабуть, як "шаблонні вирази". Але назва вже прижилась, а скажете "шаблонні вирази" - вас просто не зрозуміють :). Звідси: Регулярний вираз -  це рядок, що задає шаблон пошуку під-рядків в рядку. Регулярні вирази використовуються для аналізу текстів на предмет відповідності текстової інформації деякому шаблону. Наприклад , шаблон, що задає слово, яке містить букву "к". Де застосовують

Python: як програмно перемкнути розкладку клавіатури в Windows

Дослідивши дане питання, я побачив, що Python не має засобів "з коробки" для вирішення цієї задачі. Відвоідно, задача повинна вирішуватись для каждої ОС своїм шляхом. Дане рішення було знайдено мною для ОС Windows XP +. Панацея - Win API Для того, щоб виконати завдання необхідно встановити додатково бібліотеку pywin32 , яка надає доступ до функцій Windows API з Python. З цієї бібліотеки нам знадобиться модуль win32api . >>> import win32api Дослідивши його вміст, можна побачити, що для роботы з розкладкою клавіатури є декілька функцій і одне системне повідомлення Windows - WM_INPUTLANGCHANGE : GetKeyboardLayout GetKeyboardLayoutList LoadKeyboardLayout В даному випадку для нас важлива саме остання функція - LoadKeyboardLayout . Дана функція завантажує нову розкладку (якщо вона ще не завантажена) і виконує після цього ще якісь дії; приймає в якості аргументів два: рядок з ідентифікатором розкладки. дію. Більш детально про їхні можливі значення можна почитати в MSDN . О

Python: PEP-8 чи не PEP-8

Пост - не технічний, кому не цікаво - можете далі не читати... PEP-8, хоча й фактично є пропозицією по розширенню Python під номером 8, серед Python програмістів уже став терміном, що позначає правила стилю оформлення коду. Ні, я не збираюсь зараз описувати його тут - про нього можна почитати в першоджерелі . Питання в тому, слідувати цьому стандарту, чи не слідувати? Ітак, стандарт це в більшості випадків добре, оскільки вносить порядок. Наприклад, стандарт USB 2.0 - просто прекрасний стандарт, уявіть собі, якби флешки були не USB, а кожна мала б свій вихід :)... Жахливо, так, були б у нас USB-порти як card-reader'и - 62 в 1.. Реально 62 в 1 Інша справа з PEP-8. Тут все по іншому, адже програма не змінює свою поведінку, якщо ми будемр робити відступ не в 4 пробіла, а 2 (добре, що більшість, все-таки, робить 4), або будемо ставити пробіл перед другою дужкою, чи не будемо і т.д..  Отже, кожен програміст може редагувати свій код як йому хочеться. Мені, наприклад, подобається