我有个大麻烦(对我来说!)使用python gtk模块。在
我可以打开多个窗口,但不能单独关闭(一次,一个窗口)。 如果我关闭一个窗口,所有的窗口都会自动关闭。 我只想关第一扇窗户。关上第一扇窗户后,来个新窗户(由我选择)。在
例如:
#!/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.“应用程序”类将工作,并将出现“应用程序”窗口
3-如果我单击一个按钮(AppBt1或AppBtn2),“APP”窗口将关闭(自动关闭;不是我自己!)在
4-如果我被点击“APP”窗口上的“AppBtn1”按钮(@step 3);“CLS1”类将工作,其窗口将打开
,或者,如果我被点击了“APP”窗口上的“AppBtn2”按钮(@step 3),“CLS2”类将工作,其窗口将打开
当程序运行时,我只想在屏幕上显示一个窗口;如果我单击一个按钮,它的窗口将关闭,一个新窗口将打开(由我选择,自动!)在
我该怎么做?你能写下它的代码吗 谢谢!在
呼叫gtk.main\u退出会杀死整个程序(它基本上停止了GTK)。所以你需要的是,当最后一个窗口关闭时停止GTK。您当前所做的是在关闭任何窗口时停止GTK。在
所以只需使用一个全局变量,作为windows打开的计数器。在delete事件处理程序上,递减该计数器,如果它达到0,则意味着您没有打开更多的窗口,您可以调用gtk.main\u退出,否则,不执行任何操作,窗口将正常被破坏。在
要终止父窗口,只需在连接到
clicked
信号时将父窗口作为最后一个参数传递。在关联的回调中,您将获得最后一个参数并调用gtk.Widget.destroy在上面。在好吧,一个更好的方法可能是修改已经打开的窗口,而不是关闭它然后打开另一个窗口。在
相关问题 更多 >
编程相关推荐