【问题标题】:Blank window when lanching about dialogue twice?两次启动对话时出现空白窗口?
【发布时间】:2013-02-17 12:36:59
【问题描述】:

我完成了一个应用程序设计,但没有发生任何有用的事情,但我有两个窗口。一个是主窗口,一个是关于对话。它们都在 Glade 的一个 .ui 文件中。

当我使用帮助>关于(在我的程序中)打开关于对话框时,一切正常。使用相同的方法将其关闭并再次打开会导致空白窗口。

这是我的代码:

#! /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()

【问题讨论】:

    标签: python linux gtk gnome pygobject


    【解决方案1】:

    “关于”窗口不会在您每次调用 self.aboutWindow = self.builder.get_object("aboutWindow") 时创建一次,它会在您加载 UI 文件时创建一次。因此,当您调用 self.aboutWindow.destroy() 时,它会永远销毁它,并且下次您尝试显示该窗口时它不再存在。

    您可能不想破坏窗口,而是想隐藏它self.aboutWindow.hide()

    【讨论】:

    • 谢谢,我以为每次我将它分配给 self.aboutWindow 时它都会得到一个新的 aboutWindow 实例
    猜你喜欢
    • 2013-02-16
    • 1970-01-01
    • 2020-05-11
    • 2020-06-23
    • 2016-10-18
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多