Проверить, существует ли вкладка с определенным текстом в gtk.notebook +gtk3

Есть ли функция для проверки наличия вкладки в gtk.notebook с определенным текстом? Только что нашел функцию "get_menu_label_text ()", но он просто возвращает текст вкладки от переданного потомка.

Просто хочу узнать, есть ли уже созданная вкладка, поэтому мне не нужно создавать ее снова.

Действительно просто, но не могу найти правильного решения.

1 ответ

Решение

Не уверен, зачем вам нужна такая функция, так как разработчик должен знать, что происходит на ноутбуке и как таковой он становится "отслеживаемым".

Во всяком случае, есть несколько подходов, таких как получение количества страниц с get_n_pages(), получая ребенка на страницу с get_nth_page() в цикле for и вызывая Gtk.Notebook get_tab_label_text(child) метод.

Другим вариантом будет использование Gtk.Container foreach метод (Gtk.Notebook наследует от Gtk.Container) и итерации по всем дочерним элементам, получают текст метки вкладки и сравнивают его с текстом поиска.

В следующем очень простом примере создается двухстраничная записная книжка с текстовыми метками, на которые нет ссылок, а затем мы просто проверяем, существует ли какая-либо метка в метках вкладки "Блокнот".

Пример:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class MyWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="Simple Notebook Example")
        self.set_border_width(3)

        self.notebook = Gtk.Notebook()
        self.add(self.notebook)

        self.page1 = Gtk.Box()
        self.page1.set_border_width(10)
        self.page1.add(Gtk.Label('This is Gtk.Notebook Page X'))
        self.notebook.append_page(self.page1, Gtk.Label('Page X'))

        self.page2 = Gtk.Box()
        self.page2.set_border_width(10)
        self.page2.add(Gtk.Label('This is Gtk.Notebook Page Y'))
        self.notebook.append_page(self.page2, Gtk.Label('Page Y'))

    def check_exists_tab_with_label(self, label):
        self.notebook.foreach(self.check_label_for_child, label) 

    def check_label_for_child(self, widget, label):
        if (self.notebook.get_tab_label_text(widget) == label):
            print ("FOUND")

win = MyWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
win.check_exists_tab_with_label('Page Y')
Gtk.main()
Другие вопросы по тегам