【问题标题】:Pygubu Load new Window from UI FilePygubu 从 UI 文件加载新窗口
【发布时间】:2016-08-03 07:32:49
【问题描述】:

我一直在查看 Pygubu 示例,试图最好地了解如何在没有成功的情况下实现我的目标。

我对python非常陌生,几天前才刚刚开始使用它。我有许多运行良好的函数并接受一系列变量来执行任务,但现在我想尝试创建一个 GUI 来在启动函数等之前处理输入。

因为我是新手,所以我想我会尝试 Pygubu,尤其是因为我使用的是 windows 机器。我查看了他们的示例并了解了如何加载我设计的MainWindow

我的主窗口基本上是一个从 Panorama.ui 加载的菜单系统,它有几个按钮可以用来打开其他窗口(“SphericalWindow”、“Gigapixel_Window”和“Settings”)。

我玩过回调函数,在拉起messagebox 时效果很好,但是我卡住的是如何调用要打开的其他窗口之一。

我在How do I create child windows with Python tkinter? 看到一个关于打开子窗口的示例,但我不确定如何将其翻译为从 UI 文件中打开框架?

该示例将如何创建顶级窗口,例如下面被转换,以便 tk.Toplevel 是从 UI 文件构建的?

t = tk.Toplevel(self)

感谢您的帮助。

import sys
import os

try:
    import tkinter as tk
    from tkinter import messagebox
except:
    import Tkinter as tk
    import tkMessageBox as messagebox

sys.path.append(os.path.join(os.path.dirname(__file__), '../'))

import pygubu


class Myapp:
    def __init__(self, master):
        self.builder = builder = pygubu.Builder()
        fpath = os.path.join(os.path.dirname(__file__),"Panorama.ui")
        builder.add_from_file(fpath)

        mainwindow = builder.get_object('MainWindow', master)

        builder.connect_callbacks(self)


    def on_Gigapixel_Click(self):
        #Callback to open window here.

if __name__ == '__main__':
    root = tk.Tk()
    app = Myapp(root)
    root.mainloop()

【问题讨论】:

    标签: python tkinter pygubu


    【解决方案1】:

    虽然这个帖子比较老了,但我仍然会回答它,因为我偶然发现它正在寻找我现在已经想出的类似解决方案。

    我的 Pygubu 文件如下所示:

    对应的代码如下:

    try:
        import tkinter as tk  # for python 3
        from tkinter import messagebox
    except:
        import Tkinter as tk  # for python 2
        import tkMessageBox as messagebox
    
    import threading
    import pygubu
    
    class Application:
    
        def __init__(self, master):
    
            self.builder = builder = pygubu.Builder()
    
            builder.add_from_file('Panorama.ui')
    
            self.mainwindow = builder.get_object('MainWindow', master)
    
            builder.connect_callbacks(self)
    
        def openSphericalWindow(self):
    
            builder2 = pygubu.Builder()
            builder2.add_from_file('Panorama.ui')
            top2 = tk.Toplevel(self.mainwindow)
            frame2 = builder2.get_object('SphericalWindow', top2)
            builder2.connect_callbacks(self)
    
    
        def quit(self, event=None):
            self.mainwindow.quit()
    
        def run(self):
            self.mainwindow.mainloop()
    
    def startUI():
    
        root = tk.Tk()
        app = Application(root)
        root.mainloop()
    
        return
    
    if __name__ == '__main__':
    
        t = threading.Thread(target=startUI)
        t.start()
    

    然后这会打开一个带有三个按钮的设置窗口,其中的 SphericalWindow-Button 会打开一个新窗口。

    希望这可能对将来的某人有所帮助!

    干杯, 蒂姆

    【讨论】:

      猜你喜欢
      • 2019-05-18
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多