我有一个很大的问题(对我来说!)与python gtk模块。
我可以打开多个窗口;但我不能单独关闭(一次,一个窗口)。 如果我关闭一个窗口,所有窗口都会自动关闭。 我想只关闭第一个窗口。关闭firt窗口后,进入一个新窗口(按我的选择)。
例如:
#!/usr/bin/env python
import pygtk
pygtk.require20()
import gtk
class CLS1(object):
def __init__(self):
self.mywindow = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.mywindow.connect("delete_event", gtk.main_quit)
self.btn = gtk.Button("Cls1|Btn")
self.mywindow.add(self.btn)
self.mywindow.show_all()
def main(self):
gtk.main()
class CLS2(object):
def __init__(self):
self.mywindow = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.mywindow.connect("delete_event", gtk.main_quit)
self.btn = gtk.Button("Cls2|Btn")
self.mywindow.add(self.btn)
self.mywindow.show_all()
def main(self):
gtk.main()
class APP(object):
def __init__(self):
self.mywindow = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.mywindow.connect("delete_event", gtk.main_quit)
self.hori = gtk.HBox()
self.btn1 = gtk.Button("AppBtn1")
self.btn2 = gtk.Button("AppBtn2")
self.btn1.connect("clicked", self.show_me , "AppBtn1")
self.btn2.connect("clicked", self.show_me , "AppBtn2")
self.hori.pack_start(self.btn1)
self.hori.pack_start(self.btn2)
self.mywindow.add(self.hori)
self.mywindow.show_all()
def show_me(self, penar, data):
if data=="AppBtn1" :
CLS1().main()
if data=="AppBtn2":
CLS2().main()
gtk.main_quit()
def main(self):
gtk.main()
APP().main()
我想要这个:
1-我将运行程序
2-“APP”类将起作用并将进入“APP”窗口
3-如果我点击一个按钮(AppBt1或AppBtn2); “APP”窗口将关闭(自动;不是我!)
4-如果我在“APP”窗口点击了“AppBtn1”按钮(@step 3); “CLS1”类将起作用,其窗口将打开
,或者如果我在“APP”窗口点击了“AppBtn2”按钮(@step 3); “CLS2”类将起作用,其窗口将打开
我想在程序运行时只在屏幕上显示一个窗口;如果我点击一个按钮;它的窗口将关闭,一个新窗口将打开(由我选择,并自动!)
我该怎么做?你可以写它的代码:) 非常感谢!
答案 0 :(得分:2)
调用gtk.main_quit将终止整个程序(它基本上会停止GTK)。所以你需要的只是在最后一个窗口关闭时停止GTK 。您当前正在做的是在任何窗口关闭时停止GTK。
因此,只需使用一个全局变量,您将用作打开窗口的计数器。在删除事件处理程序上,递减该计数器,如果它达到0表示你没有打开更多的窗口,你可以调用gtk.main_quit,否则,什么也不做,窗口将被正常销毁。
要终止父窗口,只需在连接到clicked
信号时将父项作为最后一个参数传递。在相关的回调中,你将获得最后一个参数,并在其上调用gtk.Widget.destroy。
答案 1 :(得分:1)
更好的方法是修改已经打开的窗口,而不是关闭它并打开另一个窗口。