我的目標是生成一個帶有“NewWindow”按鈕的視窗。如果我按下按鈕,程式應該會打開一個新視窗。這個視窗我存盤在一個類“NewWindow”中以快速重現它。在這個“NewWindow”中,我有另一個按鈕。如果我按下它,基本視窗的標簽應該被更新并且視窗“NewWindow”應該自動關閉。
這是我的代碼:
from tkinter import *
class NewWindow(Toplevel):
def __init__(self, master = None):
super().__init__(master = master)
self.title('NewWindow')
self.lb = Label(self, text='Hello')
self.lb.grid(column=0, row=0, columnspan=1)
self.bt1 = Button(self, text="apply Hello", command= self.bt_press)
self.bt1.grid(column=0, row=1)
def bt_press(self):
window.basic_lb.text = "Hello"
window = Tk()
def new_Editor():
a = NewWindow(window)
window.title("BasicWindow")
window.basic_lb = Label(window, text='None')
window.basic_lb.grid(column=0, row=0, columnspan=1)
window.basic_bt = Button(window, text="NewWindow", command=new_Editor)
window.basic_bt.grid(column=0, row=1)
window.mainloop()
問題:
- 啟動時會顯示兩個視窗 NewWindow 和 BasicWindow。我只想打開 BasicWindow 并且 NewWindow 應該在單擊按鈕 basic_bt 后打開。我該如何解決?(已經通過下面的commed解決了)
- 為什么按 self.bt1 后 basic_lb 中的標簽文本沒有更新?
- 如何使用 bt_press 方法關閉 NewWindow?
uj5u.com熱心網友回復:
您的代碼中有一些拼寫錯誤/錯誤會導致您的一些問題。正如@Tim 所說,當您將函式傳遞給類似的命令command=function()時,它將在運行時呼叫,而不是在按下按鈕時呼叫。您需要將函式句柄傳遞給命令,command=function. 您可以通過在按鈕命令中使用 lambda 函式來解決此問題,但使用它更容易command=self.bt_press
回答您的第二個問題,window.basic_lb.text = "Hello"不是您如何更改 tkinter 中的文本,而是Label使用<Label>.config(text="Hello"). 您還應該使用self.master和定義self.master = masterin__init__而不僅僅是 using ,因為雖然由于它沒有在本地范圍內定義window而您可以訪問,但最好顯式定義它。window
您可以使用 關閉視窗window.destroy()。
您的作業代碼現在是:
from tkinter import *
class NewWindow(Toplevel):
def __init__(self, master = None):
super().__init__(master = master)
self.title('NewWindow')
self.master = master
self.lb = Label(self, text='Hello')
self.lb.grid(column=0, row=0, columnspan=1)
self.bt1 = Button(self, text="apply Hello", command=self.bt_press)
self.bt1.grid(column=0, row=1)
def bt_press(self):
self.master.basic_lb.config(text="Hello")
self.destroy()
window = Tk()
def new_Editor():
a = NewWindow(window)
window.title("BasicWindow")
window.basic_lb = Label(window, text='None')
window.basic_lb.grid(column=0, row=0, columnspan=1)
window.basic_bt = Button(window, text="NewWindow", command=new_Editor)
window.basic_bt.grid(column=0, row=1)
window.mainloop()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/425915.html
