0

アプリケーションの設計は完了しましたが、有用なことは何も起こりませんでしたが、ウィンドウが 2 つあります。1 つはメイン ウィンドウで、もう 1 つはアバウト ダイアログです。それらはすべて Glade の 1 つの .ui ファイルにあります。

[Help] > [About] (プログラム内) を使用して [About] ダイアログを開くと、すべてが機能します。閉じて同じ方法で再度開くと、空白のウィンドウが表示されます。

これが私のコードです:

#! /usr/bin/env python3

from gi.repository import Gtk

class window():
    def __init__(self):
        self.builder = Gtk.Builder()

        self.builder.add_from_file("./personalinfo.ui")

        self.mainWindow = self.builder.get_object("mainWindow")

        self.mainWindow.connect("destroy", self.on_mainWindow_destroy)

        self.mainWindow.set_title("Persona")

        self.mainWindowMainBoxButtonBoxCancel = self.builder.get_object("mainWindowMainBoxButtonBoxCancel")

        self.mainWindowMainBoxButtonBoxCancel.connect("clicked", self.on_mainWindowMainBoxButtonBoxCancel_clicked)

        self.mainWindowMainBoxButtonBoxOK = self.builder.get_object("mainWindowMainBoxButtonBoxOK")

        self.mainWindowMainBoxButtonBoxOK.connect("clicked", self.on_mainWindowMainBoxButtonBoxOK_clicked)

        self.mainWindowMainBoxGenderBoxCombo  = self.builder.get_object("mainWindowMainBoxGenderBoxCombo")

        self.mainWindowMainBoxGenderBoxCombo.set_active(0)

        self.mainWindowMainBoxMenuFileMenuQuit = self.builder.get_object("mainWindowMainBoxMenuFileMenuQuit")

        self.mainWindowMainBoxMenuFileMenuQuit.connect("activate", self.on_mainWindowMainBoxMenuFileMenuQuit_activate)

        self.mainWindowMainBoxMenuHelpMenuAbout = self.builder.get_object("mainWindowMainBoxMenuHelpMenuAbout")

        self.mainWindowMainBoxMenuHelpMenuAbout.connect("activate", self.on_mainWindowMainBoxMenuHelpMenuAbout_activate)

        self.mainWindow.show_all()

    def on_mainWindow_destroy(self, widget):
        print("destroy: 'mainWindow'")

        Gtk.main_quit()

    def on_mainWindowMainBoxButtonBoxCancel_clicked(self, widget):
        print("clicked: 'mainWindowMainBoxButtonBoxCancel'")

        Gtk.main_quit()

    def on_mainWindowMainBoxButtonBoxOK_clicked(self, widget):
        print("clicked: 'mainWindowMainBoxButtonBoxOK'")

        Gtk.main_quit()

    def on_mainWindowMainBoxMenuFileMenuQuit_activate(self, widget):
        print("activate: 'mainWindowMainBoxMenuFileMenuQuit'")

        Gtk.main_quit()

    def on_mainWindowMainBoxMenuHelpMenuAbout_activate(self, widget):
        print("activate: 'mainWindowMainBoxMenuHelpMenuAbout'")

        self.aboutWindow = self.builder.get_object("aboutWindow")

        self.aboutWindow.set_title("About Persona")

        self.aboutWindowMainBoxButtonBoxOK = self.builder.get_object("aboutWindowMainBoxButtonBoxOK")

        self.aboutWindowMainBoxButtonBoxOK.connect("clicked", self.on_aboutWindowMainBoxButtonBoxOK_clicked)

        self.aboutWindow.show_all()

    def on_aboutWindowMainBoxButtonBoxOK_clicked(self, widget):
        print("clicked: 'aboutWindowMainBoxButtonBoxOK'")

        self.aboutWindow.destroy()

w = window()

Gtk.main()
4

1 に答える 1

2

バージョン情報ウィンドウは、呼び出すたびに作成されるわけではありませんself.aboutWindow = self.builder.get_object("aboutWindow")。UI ファイルをロードすると、一度作成されます。したがって、呼び出すself.aboutWindow.destroy()と永久に破棄され、次にウィンドウを表示しようとすると存在しなくなります。

ウィンドウを破壊する代わりに、おそらくウィンドウを非表示にする必要がありますself.aboutWindow.hide()

于 2013-02-17T23:19:51.710 に答える