【问题标题】:python gtk multi windowpython gtk 多窗口
【发布时间】:2012-12-21 08:44:42
【问题描述】:

我对 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-“APP”类将起作用,并将出现“APP”窗口

3- 如果我点击一个按钮(AppBt1 或 AppBtn2); “APP”窗口将关闭(自动关闭;不是我!)

4- 如果我点击了“APP”窗口上的“AppBtn1”按钮(@step 3); "CLS1" 类将起作用并且其窗口将打开

,或者如果我点击了“APP”窗口上的“AppBtn2”按钮(@step 3); “CLS2”类将工作,其窗口将打开

我希望程序运行时屏幕上只有一个窗口;如果我点击一个按钮;它的窗口将关闭并打开一个新窗口(由我选择,并且自动!)

我该怎么做?你能写它的代码吗:) 非常感谢!

【问题讨论】:

    标签: python linux window gtk multi-window


    【解决方案1】:

    调用 gtk.main_quit 会杀死整个程序(它基本上会停止 GTK)。所以你需要的只是在最后一个窗口关闭时停止 GTK。您当前所做的是在任何窗口关闭时停止 GTK。

    所以只需使用一个全局变量,您将使用它作为打开窗口的计数器。在 delete-event 处理程序上,递减该计数器,如果它达到 0,则意味着您没有更多的窗口打开,您可以调用 gtk.main_quit,否则,什么也不做,窗口将被正常销毁。

    要杀死父窗口,只需在连接clicked 信号时将父窗口作为最后一个参数传递。在关联的回调中,您将获取最后一个参数并对其调用 gtk.Widget.destroy。

    【讨论】:

      【解决方案2】:

      更好的方法可能是修改已经打开的窗口,而不是关闭它并打开另一个。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-13
        • 1970-01-01
        • 1970-01-01
        • 2012-11-08
        • 2013-01-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多