簡體   English   中英

Tkinter 停止幀重疊

[英]Tkinter Stop Frame from Overlapping

我正在嘗試顯示文件和按鈕中的數據,然后單擊按鈕后,顯示新文件中的新數據以及按鈕。 您可以在我嘗試調試時看到我的打印語句。 當我運行程序時,有 output,它正確顯示了一個#和一個按鈕。 但是,顯示的 # 來自我擁有的最后一個文件(文件 #3),而不是來自文件 #1。 我相信文件#1 被文件#2 覆蓋,然后文件#3 被覆蓋。 所有這一切都發生在沒有點擊任何按鈕的情況下。 如何讓程序等到單擊按鈕后才顯示新的 # 和按鈕?

window = Tk()

def clicked():
    top = Toplevel(window)
    top.geometry('300x300')
    popLabel = Label(top, text = "E")
    popLabel.place(relx = 0.5, rely = 0.5, anchor = 'center')
    for widgets in frame1.winfo_children():
      widgets.destroy()

for x in range(1,4):
    fileName = "file" + str(x) + ".json"
    print(fileName)
    frame1 = LabelFrame(window, width = 300, height = 300, padx=10,pady=5)
    frame1.grid(row= 0,column=0)
    with open(fileName) as f:
        data = json.load(f)
        #print(data)
    num = "#" + data.get("id")
    print(num)
    numLabel = Label(
        frame1,
        text = num
    ).grid(row = 1, column = 1)

    firstButton = Button(
        frame1,
        text = "A",
        command = clicked
    ).grid(row = 2, column = 1, sticky = 's')

window.mainloop()

我猜你真正的問題是你每次都在循環中覆蓋框架。 因此,在循環之前定義您的框架並將列號設置為變量。

import tkinter as tk
window = tk.Tk()

def clicked(number):
    top = tk.Toplevel(window)
    top.geometry('300x300')
    fileName = "file" + str(number)+ ".json"
    # with open(fileName) as f:
         # data = json.load(f)
    data = "data"
    num = "#"  # data.get("id")

    popLabel = tk.Label(top, text = fileName)
    popLabel.place(relx = 0.5, rely = 0.5, anchor = 'center')
        #for widgets in frame1.winfo_children():
    # widgets.destroy()
frame1 = tk.LabelFrame(window, width = 300, height = 300, padx=10,pady=5)
frame1.place(relwidth = 1, relheight= 1)
for x in range(1,4):

    num = "#"
    numLabel = tk.Label(
        frame1,
        text = num
    ).grid(row = 1, column = x)

    firstButton = tk.Button(
        frame1,
        text = "A_{}".format(x),
        command= lambda x =x: clicked(x)
    ).grid(row = 2, column = x, sticky = 's')

window.mainloop()

編輯:在這種情況下,我會將open命令放在checked的 function 中,並告訴他們要加載的參數數量。

暫無
暫無

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

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