Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Gtk-退出多窗口程序_Python_Gtk_Glade - Fatal编程技术网

Python Gtk-退出多窗口程序

Python Gtk-退出多窗口程序,python,gtk,glade,Python,Gtk,Glade,我在尝试退出多窗口程序时遇到了一些问题,确切地说是2。 有一个连接窗口和一个主窗口。如果用户单击connect窗口的native X按钮,它将关闭,程序将结束,一切正常 但是如果用户确实连接并且主窗口打开,如果用户单击主窗口的X按钮,窗口将关闭,但进程不会终止 我尝试过不同的方法,但似乎都不管用,因此代码的当前状态如下: “连接”窗口(self.window.connect('delete-event',gtk.main_quit)行被注释,因为删除事件绑定到.glade文件中的quit方法):

我在尝试退出多窗口程序时遇到了一些问题,确切地说是2。 有一个连接窗口和一个主窗口。如果用户单击connect窗口的native X按钮,它将关闭,程序将结束,一切正常

但是如果用户确实连接并且主窗口打开,如果用户单击主窗口的X按钮,窗口将关闭,但进程不会终止

我尝试过不同的方法,但似乎都不管用,因此代码的当前状态如下:

“连接”窗口(
self.window.connect('delete-event',gtk.main_quit)
行被注释,因为删除事件绑定到.glade文件中的quit方法):

主窗口(同样,
self.window.connect('delete-event',self.gtk.main_quit)
被注释,因为delete事件绑定到my.glade文件中的quit方法):

我认为这无关紧要,但每个窗口都在自己的.py文件中,程序从第三个文件启动:

from gui.connect_win import ConnectWin
from gi.repository import Gtk

connect_win = ConnectWin(Gtk)
connect_win.show_all()

只需使用GtkApplication为您处理多个GtkApplication窗口。只需使用GtkApplication为您处理多个GtkApplication窗口。
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gio, GObject

class MainWinHandler(object):
    def __init__(self, connect_win, window, builder, gtk):
        self.connect_win = connect_win
        self.window = window
        self.builder = builder
        self.gtk = gtk
        # self.window.connect('delete-event', self.gtk.main_quit)

    def quit(self, widget, data=None):
        self.gtk.main_quit()


class MainWin(object):
    def __init__(self, connect_win, gtk, krpc_handler):
        self.gtk = gtk
        self.builder = self.gtk.Builder()
        self.builder.add_from_file(r'path_to_glade_file')
        self.window = self.builder.get_object('main')
        self.builder.connect_signals(MainWinHandler(connect_win, self.window, self.builder, self.gtk, krpc_handler))

    def show_all(self):
        self.window.show_all()
        self.gtk.main()
from gui.connect_win import ConnectWin
from gi.repository import Gtk

connect_win = ConnectWin(Gtk)
connect_win.show_all()