簡體   English   中英

無法使用類顯示 Tkinter GUI

[英]Can't get Tkinter GUI to show using classes

我正在嘗試制作一個 Tkinter GUI,它采用 Excel 文檔,讀取它們,並將它們導出到 window。 問題是當我將代碼更改為以下以合並 class 結構時,我無法再正確加載 GUI。

import tkinter as tk
from tkinter.filedialog import askopenfilename

def NewFile():
    print("New File!")
def OpenFile():
    name = askopenfilename()
    print(name)
def About():
    print("About works")
def deletelist():
    listbox.delete(0, END)

class MainApplication(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        self.master = master
        self.frame = tk.Frame(self.master)

        self.load = tk.Button(self.frame, text = "Load XLSX File", command = OpenFile)
        self.load.grid(row = 0, column = 0, padx = 5, pady = 5, sticky = 'w')

        self.ckframe = tk.LabelFrame(self.frame, text="Currency Selections")
        self.ckframe.grid(row = 1, column = 0, padx = 5, pady = 5, stick = 'nesw')
        self.prochk = tk.Checkbutton(self.ckframe, text = '1 Currency').grid(row = 1, column = 0, columnspan = 2, sticky = 'w')
        self.msnchk = tk.Checkbutton(self.ckframe, text = '2 Currency').grid(row = 1, column = 2, columnspan = 2, sticky = 'w')
        self.nightschk = tk.Checkbutton(self.ckframe, text = '3 Currency').grid(row = 1, column = 4, columnspan = 2, sticky = 'w')
        self.semichk = tk.Checkbutton(self.ckframe, text = '4 Currency').grid(row = 2, column = 0, columnspan = 2, sticky = 'w')
        self.instqualCRchk = tk.Checkbutton(self.ckframe, text = '5 Currency').grid(row = 2, column = 2, columnspan = 2, sticky = 'w')
        self.msnCRchk = tk.Checkbutton(self.ckframe, text = '6 Currency').grid(row = 2, column = 4, columnspan = 2, sticky = 'w')

        self.listbox = tk.Listbox(self.frame, width = 83)
        self.listbox.grid(row = 3, column = 0, columnspan = 1, sticky = 'w') # Fix width size function
        self.listbox.insert(1, 'Test1')
        self.listbox.insert(0, 'Test2')
        self.save = tk.Button(self.frame, text = "Save").grid(row = 8, column = 0, padx = 5, pady = 5, stick = 'e')
        self.delete = tk.Button(self.frame, text = "Delete", command = deletelist).grid(row = 8, column = 0, padx = 45, pady = 5, stick = 'e')

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

我進行了很多搜索,試圖找到一個使用 tkinter GUI 和網格系統的類的解決方案,但我主要找到了使用 pack() 解決方案制作 GUI 的方法。

MainApplication的實例是一個框架。 您永遠不會在該實例上調用packplacegrid ,以便該框架及其所有子項將不可見。

此框架創建另一個包含所有其他小部件的框架self.frame 你也永遠不會在它上面調用packplacegrid ,所以它和它的所有子節點都是不可見的。

由於小部件位於不可見的框架中,並且該框架本身是不可見的,因此其他小部件都將不可見。

首先要做的是擺脫self.frame 刪除創建它的行,並且在您引用self.frame的任何地方,將其替換為self 由於在這種情況下self已經是一個框架,因此在其中創建另一個框架是沒有意義的。

接下來,您需要將MainApplication的實例添加到 window。 因為它是唯一直接在根 window 中的小部件,所以pack是最簡單的選擇。

root = tk.Tk()
app = = MainApplication(root)
app.pack(fill="both", expand=True)

暫無
暫無

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

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