簡體   English   中英

Pygubu 從 UI 文件加載新窗口

[英]Pygubu Load new Window from UI File

我一直在查看Pygubu 示例,試圖最好地了解如何實現我的目標,但沒有成功。

我對 python 非常陌生,幾天前才開始使用它。 我有許多運行良好的函數並接受一系列變量來執行任務,但現在我想嘗試創建一個 GUI 來在啟動函數等之前處理輸入。

因為我是新手,所以我想我會嘗試 Pygubu,特別是因為我使用的是Windows 機器 我查看了他們的示例,並了解了如何加載我設計的MainWindow

我的主窗口基本上是一個從 Panorama.ui 加載的菜單系統,它有幾個按鈕,旨在按下這些按鈕來打開其他窗口(“SphericalWindow”、“Gigapixel_Window”和“設置”)。

我玩過回調函數,在拉起一個messagebox效果很好,但是我遇到的問題是如何調用要打開的其他窗口之一。

我在如何使用 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 文件如下所示: 我編造了一個我從你的規格中理解的最小例子。

對應的代碼如下所示:

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 會打開一個新窗口。

在此處輸入圖片說明

希望這可以在將來對某人有所幫助!

干杯,蒂姆

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM