【问题标题】:Creating a sub-window with PyGTK使用 PyGTK 创建子窗口
【发布时间】:2023-06-30 05:32:01
【问题描述】:

我正在使用 PyGTK 在 python 中创建一个 gui,但我不知道如何制作一个子窗口。例如我有我的主窗口:

class Main(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="GCT")

        self.box = Gtk.Box()
        self.set_default_size(300, 300)
        self.set_position(Gtk.WindowPosition.CENTER)
        self.table = Gtk.Table(6, 5)

        self.button = Gtk.Button("sub-window")
        self.table.attach(self.button, 0, 2, 0, 1)

        self.box.add(self.table)
        self.add.(self.box)
        self.show_all()

当我单击子窗口按钮时,我想启动一个独立于我的主窗口的新窗口,这将允许我在不关闭子窗口的情况下仍然操作主窗口。我怎么能做到这一点?

【问题讨论】:

    标签: python user-interface pygtk


    【解决方案1】:
    from gi.repository import Gtk
    
    class AnotherWindow(Gtk.Window):
        def __init__(self):
            Gtk.Window.__init__(self, title="GCT")
            self.connect("destroy", lambda x: Gtk.main_quit())
    
            self.add(Gtk.Label("This is another window"))
            self.show_all()
    
    
    
    class Main(Gtk.Window):
        def __init__(self):
            Gtk.Window.__init__(self, title="GCT")
            self.connect("destroy", lambda x: Gtk.main_quit())
    
            self.box = Gtk.Box()
            self.set_default_size(300, 300)
            self.set_position(Gtk.WindowPosition.CENTER)
            self.table = Gtk.Table(6, 5)
    
            self.button = Gtk.Button("sub-window")
            self.button.connect("clicked", self.open_window)
            self.table.attach(self.button, 0, 2, 0, 1)
    
            self.box.add(self.table)
            self.add(self.box)
            self.show_all()
    
        def open_window(self, win):
            subw = AnotherWindow()
    
    
    def main():
        m = Main()
        Gtk.main()
        return 0
    
    if __name__ == '__main__':
        main()
    

    每次单击 sub_window 按钮时,都会打开另一个窗口。它们会相互堆积,所以你不会看到太多:-)

    您应该始终将连接添加到销毁操作 - 否则 Gtk 的主循环将永远不会停止,您将无法将控制权交还给键盘。

    【讨论】: