Настройка TabControl для закрытия отдельных вкладок

Вы можете использовать contextlib.

from contextlib import contextmanager
import sys
@contextmanager
def stdout_redirector():
    class MyStream:
        def write(self, msg):
            prefix = 'augmented:' if msg.strip() else ''
            old_stdout.write( prefix + msg)
        def flush(self):
            old_stdout.flush()
    old_stdout = sys.stdout
    sys.stdout = MyStream()
    try:
        yield
    finally:
        sys.stdout = old_stdout

output

Лучше использовать оператор with для управления перенаправлением. Если это невозможно в вашем случае, вызов методов __enter__() и __exit__() объекта перенаправителя также работает. Вы также можете поместить эти коды перенаправителя в функцию-ловушку pre_run_cell и post_run_cell в IPython.

18
задан THE DOCTOR 26 April 2011 в 18:10
поделиться

2 ответа

Я создал производный элемент управления вкладки около года назад. Я не собираюсь публиковать здесь источник, потому что он длиной около 700 строк и довольно запутанный. Может быть, я найду время, чтобы очистить код, а затем выпустить его здесь. Сейчас я кратко опишу способ его построения.

Каждая вкладка имеет значок «X» слева от заголовка, а страницы вкладок поддерживают переупорядочение путем перетаскивания и перемещения между ними. управление несколькими вкладками.

Я выбираю простой способ получить значок на вкладках. Элемент управления вкладками имеет свойство TabControl.ImageList , а вкладка имеет свойство TabPage.ImageIndex . Поэтому я просто добавил три значка в список изображений - обычный, при наведении, нажатие - и обработал события мыши.

С помощью TabControl.GetTabRect () вы можете проверить, находится ли мышь над определенной вкладкой. и с некоторой математикой вы найдете, если это над значком. Затем вам просто нужно изменить значок в зависимости от состояния кнопки мыши и в конечном итоге удалить вкладку под мышью, если кнопка была нажата.

Основная проблема этого решения заключается в том, что для вычисления, если мышь находится над значком, требуется знать, где значок нарисован относительно вкладки, и это может измениться с новой версией Windows. И значок слева от заголовка,

9
ответ дан 30 November 2019 в 08:10
поделиться

I created a setup that is similar.

Each control that is added to the tab page at runtime is derived from a special base control I created. This base control has a close button (along with some other features such as safe to close flag).

Close tab code I'm using on my base control:

 TabPage tabpage = (TabPage)this.Parent;
TabControl tabControl = (TabControl)tabpage.Parent;

tabControl.TabPages.Remove(parent);
2
ответ дан 30 November 2019 в 08:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: