0

Python gtk モジュールに (私にとっては!) 大きな問題があります。

マルチウィンドウを開くことができます。しかし、私は単独で閉じることはできません(1回、1つのウィンドウ)。ウィンドウを閉じると、すべてのウィンドウが自動的に閉じます。最初のウィンドウだけを閉じたい。最初のウィンドウを閉じた後、新しいウィンドウが表示されます(私の選択による)。

例えば ​​:

#!/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」クラスが機能し、そのウィンドウが開きます

プログラムの実行中に画面にウィンドウを 1 つだけ表示したい。ボタンをクリックした場合; そのウィンドウが閉じて、新しいウィンドウが開きます (私の選択により、自動的に!)

これどうやってするの?そして、そのコードを書くことができます:)どうもありがとう!

4

2 に答える 2

2

gtk.main_quit を呼び出すと、プログラム全体が強制終了されます (基本的に GTK が停止します)。したがって、必要なのは、最後のウィンドウが閉じられたときにGTK を停止することだけです。現在行っていることは、ウィンドウが閉じられたときに GTK を停止することです。

したがって、開いているウィンドウのカウンターとして使用するグローバル変数を使用するだけです。delete-event ハンドラーで、そのカウンターをデクリメントし、それが 0 に達した場合は、それ以上ウィンドウを開いていないことを意味し、gtk.main_quit を呼び出すことができます。それ以外の場合は何もせず、ウィンドウは通常どおり破棄されます。

親ウィンドウを強制終了するには、clickedシグナルに接続するときに最後のパラメーターとして親を渡すだけです。関連付けられたコールバックで、最後のパラメーターを取得し、gtk.Widget.destroy を呼び出します。

于 2012-12-21T23:37:08.120 に答える
1

より良い方法は、ウィンドウを閉じて別のウィンドウを開くのではなく、既に開いているウィンドウを変更することです。

于 2012-12-21T22:47:44.087 に答える