Pygubu从UI文件加载新窗口

时间:2016-08-03 07:32:49

标签: python tkinter

请原谅我这是一个有点愚蠢的问题,但我一直在查看Pygubu的例子,试图最好地了解如何实现我的目标但没有成功。

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

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

我的主窗口基本上是一个从Panorama.ui加载的菜单系统,它有一些按钮设计用于打开其他窗口(“SphericalWindow”,“Gigapixel_Window和”设置“)。

我玩过回调函数,在拉出一个消息框时工作正常,但是我遇到的问题是如何调用其他一个窗口打开。

我看到了一个关于在How to:Create children windows using python tkinter打开子窗口的示例,但我不确定如何将其转换为在UI文件中打开一个框架?

如何创建顶级窗口的例子,例如下面进行转换,以便从UI文件构建tk.Toplevel?

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()

1 个答案:

答案 0 :(得分:0)

尽管该线程很旧,但我偶然发现它时,我仍会回答它,以寻找我现在已经找到的类似解决方案。

我的Pygubu文件如下所示: I made up a minimal example of what I understood from your specifications.

相应的代码如下:

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打开一个新窗口。

enter image description here

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

干杯, 蒂姆