gpt4 book ai didi

python - Pygubu 从 UI 文件加载新窗口

转载 作者:太空宇宙 更新时间:2023-11-04 05:25:51 24 4
gpt4 key购买 nike

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

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

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

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

我玩过回调函数,它在拉起一个消息框时效果很好,但是我卡住了的地方是如何调用其他窗口之一打开。

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

最佳答案

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

我的 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

希望这对将来的人有帮助!

干杯,蒂姆

关于python - Pygubu 从 UI 文件加载新窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38737178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com