gtk3 窗口未正确重绘

gtk3 窗口未正确重绘

我正在创建一个简单的 GTK3 应用程序。主顶层窗口有一个搜索按钮将显示另一个顶层 gtk3 窗口。当我单击第二个 gtk3 窗口上的关闭按钮(靠近标题栏)时,它会按预期关闭。但是,当我再次单击搜索按钮时,第二个顶层窗口不会重新绘制其所有小部件,而是显示为空。

另一方面,如果我点击关闭按钮(底部的 gtk 按钮),它会正常关闭。重新打开时,可以看到所有小部件。

信息:我使用 Glade 创建了 UI。

代码如下所示。但是要获取 UI 文件,您需要下载软件包。您可以下载它们这里

#! /usr/bin/env python

from gi.repository import Gtk
import os,sys

UI_FILE = "main.ui"
SECOND_UI_FILE = "second.ui"

class SampleApp:
    def __init__(self):
        self.builder = Gtk.Builder()
        self.builder.add_from_file(UI_FILE)
        self.builder.connect_signals(self)

        self.builder2 = Gtk.Builder()
        self.builder2.add_from_file(SECOND_UI_FILE)
        self.builder2.connect_signals(self)

        self.window = self.builder.get_object('window')
        self.window.set_position(Gtk.WindowPosition.CENTER)
        self.window.connect("destroy", self.destroy)
        self.window.show_all()

        self.search = self.builder.get_object('button1')
        self.search.connect("clicked", self.search_clicked)

    def destroy(self, window):
        Gtk.main_quit()

    def search_clicked(self, window):
        self.secondwindow = self.builder2.get_object('window1')
        self.secondwindow.show_all()

def main():
    app = SampleApp()
    Gtk.main()

if __name__ == "__main__":
    main()

主窗口 在此处输入图片描述

第二个窗口 - 顶层 在此处输入图片描述

第二个窗口 - 空白 在此处输入图片描述

为什么会发生这种情况?我该如何解决?

答案1

好的,您的代码的作用是让第二个窗口被销毁。之后它就消失了。

您可以通过在方法末尾添加以下两行来防止窗口被销毁(而是隐藏它)init

secondwindow = self.builder2.get_object('window1')
secondwindow.connect('delete-event', lambda w, e: w.hide() or True)

取代了删除事件(文档在这里)。

或者您可以在每次打开窗口时重新创建窗口,只需将这些行放在方法的开头即可search_clicked

self.builder2 = Gtk.Builder()
self.builder2.add_from_file(SECOND_UI_FILE)
self.builder2.connect_signals(self)

相关内容