Python GTK 3 — Не удается установить родителя для виджета верхнего уровня

#python #pygtk

Вопрос:

 Gtk-WARNING **: 19:18:52.313: Can't set a parent on a toplevel widget
 

Почему я получаю это предупреждение? Разве master win не является виджетом верхнего уровня? Что я делаю не так?
Разве master_win не должен быть верхнего уровня? Он создается первым…

 class PluginWindow(Gtk.Window):
    def __init__(self):
        super().__init__(title="Stack Demo")
        #some stuff

master_win = Gtk.ScrolledWindow()
master_win.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.ALWAYS)
win = PluginWindow()
master_win.add(win)
win.connect("destroy", Gtk.main_quit)
master_win.show_all()
Gtk.main()
 

Ответ №1:

Вы неправильно оформили заказ

 import gi

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

class PluginWindow(Gtk.Window):
    def __init__(self):
        super().__init__(title="Stack Demo")
        #some stuff

master_win = Gtk.ScrolledWindow()
master_win.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.ALWAYS)
win = PluginWindow()
win.add(master_win)
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()
 

Ответ №2:

Вы пытаетесь добавить Gtk.Объект Window() в объект Gtk.ScrolledWindow (), и это невозможно. Это перевернуто.

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

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


class PluginWindow(Gtk.Window):
    def __init__(self):
        super().__init__(title="Stack Demo")
        # some stuff


master_win = Gtk.ScrolledWindow()
master_win.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.ALWAYS)
win = PluginWindow()
# Gtk.ScrolledWindow added to Gtk.Window
win.add(master_win)
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()