簡體   English   中英

Python - Tkinter 管理框架

[英]Python - Tkinter Manage Frames

我有一個小腳本,分為 3 個框架:

  • 1 在第一行
  • 1 在第二行左
  • 1 在第二行右邊

我按下第一行框架中的按鈕,將輸入值交給左側第二行的 Label。

這是我的代碼:

import tkinter as tk

# Create Window
root = tk.Tk()

# Define String Variable
Name = tk.StringVar()

# Organize root window in 3 frames
EntryFrame = tk.Frame(root)
MainLeftFrame = tk.Frame(root)
MainRightFrame = tk.Frame(root)

# Create Buttons, Entry and Labels

NameLabel = tk.Label(MainLeftFrame, textvariable=Name)
InputName = tk.Entry(EntryFrame, width=20,bg='yellow')
SubmitButton = tk.Button(EntryFrame, text='Submit', command=lambda:action())

# Define what happens when press button reset
def reset():
    MainLeftFrame.forget()
    MainRightFrame.forget()
    EntryFrame.pack()

# Define what happens when button is pressed
def action():
    Name.set(InputName.get())
    ResetButton = tk.Button(MainRightFrame, text='Reset', command=lambda: reset())
    ResetButton.pack()
    Placeholder = tk.Label(MainRightFrame, text="place holder")
    Placeholder.pack(side="top")
    EntryFrame.forget()

# Pack Widgets
EntryFrame.pack(side='top')
MainLeftFrame.pack(side='left')
MainRightFrame.pack(side='right')

InputName.pack()
SubmitButton.pack()
NameLabel.pack()

#mainloop
root.mainloop()

現在我的問題是:當我第二次按下“提交”按鈕時(按下重置按鈕后)什么也沒有發生:(

提前致謝!

您的程序無法正常工作的原因是,在MainLeftFrameMainRightFrame上使用forget后,當調用action function 時,您不會再次打包它們。 action中添加這兩行代碼應該可以使它工作。

MainLeftFrame.pack()
MainRightFrame.pack()

這不是唯一的問題,每次調用 function 時定義新的小部件並打包它們會一遍又一遍地增加相同的小部件集。 為避免這種情況,您必須預先定義它們,然后它們會執行忘記和重新打包。 但更好的做法是為它們設置一個專用框架,以便您輕松切換。 我已經嘗試重寫你的腳本,如果這是你想要的,請告訴我。

from tkinter import *

def reset():
    entry_frame.pack()
    main_frame.pack_forget()

def submit():
    entry_frame.pack_forget()
    main_frame.pack()
    name.set(name_entry.get())

root=Tk()

entry_frame=Frame(root)
entry_frame.pack()
name_entry=Entry(entry_frame)
name_entry.pack(side='top')
submit_button=Button(entry_frame,text='Submit',command=submit)
submit_button.pack(side='top')

main_frame=Frame(root)
reset_button=Button(main_frame,text='Reset',command=reset)
reset_button.pack(side='top')
name=StringVar()
name_label=Label(main_frame,textvariable=name)
name_label.pack(side='left')
placeholer_label=Label(main_frame,text='placeholer')
placeholer_label.pack(side='right')

root.mainloop()

暫無
暫無

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

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