我是 tkinter 的新手。我在單擊按鈕時在一個函式中定義了一個標簽。當我嘗試在另一個按鈕單擊時以不同的功能訪問該標簽時,它拋出錯誤。如何訪問兩個函式之間的標簽?如何讓標簽全球化?
我的代碼:
from tkinter import *
from tkinter import messagebox
root = Tk()
def Update():
if(my_warning.cget("text") == "Warning: Click on “Validate Content“ button" or my_warning.cget("text") == "Content validation is failed!"):
messagebox.showwarning("Warning", "Validate the XML file")
else:
messagebox.showinfo("Status", "All good")
global stuff
stuff = "XML is good"
def validate_file():
global stuff
if(stuff == "XML is good"):
my_warning = Label(root, text= "Content validation is successful!", fg = "green", font = ("Helvetica", 11))
my_warning.grid(row = 8, column = 0, pady = (20,0))
elif(stuff1 == "XML is not good"):
my_warning = Label(root, text= "Content validation is failed!", fg = "red", font = ("Helvetica", 11))
my_warning.grid(row = 8, column = 0, pady = (20,0))
else:
my_warning = Label(root, text= "Warning: Click on “Validate Content“ button", fg = "red", font = ("Helvetica", 11))
my_warning.grid(row = 8, column = 0, pady = (20,0))
validate_button = Button(
root,
text='Validate',
command=validate_file, height = 1, width = 14, font = ("Helvetica", 11)
)
validate_button.grid(row = 3, column = 0, padx = (0,50), pady =20)
update_button = Button(
root,
text='Update',
command=Update, height = 1, width = 12, font = ("Helvetica", 11)
)
update_button.grid(row = 3, column = 1, padx = (300,200), pady =20)
root.mainloop()
我得到的錯誤:


uj5u.com熱心網友回復:
這是一個更好的結構化代碼,其中所有相關變數都收集在TKValidator此處的類中。缺少某些部分,例如text從哪里來。我還冒昧地更改了一些變數名稱,以更好地展示它們的用途。
from tkinter import *
from tkinter import messagebox
class TKValidator:
def __init__(self):
self.root = Tk()
self.validate_button = Button(
self.root,
text='Validate',
command=self.validate_file, height=1, width=14, font=("Helvetica", 11)
)
self.validate_button.grid(row=3, column=0, padx=(0, 50), pady=20)
self.update_button = Button(
self.root,
text='Update',
command=self.update, height=1, width=12, font=("Helvetica", 11)
)
self.update_button.grid(row=3, column=1, padx=(300, 200), pady=20)
self.text = None
self.message = None
def update(self):
if self.message is None:
messagebox.showwarning("Error", "Oopsie, validate needs to be called first")
elif self.message.cget("text") == "Warning: Click on “Validate Content“ button" or self.message.cget("text") == "Content validation is failed!":
messagebox.showwarning("Warning", "Validate the XML file")
else:
messagebox.showinfo("Status", "All good")
def validate_file(self):
if self.text == "XML is good":
self.message = Label(self.root, text= "Content validation is successful!", fg="green", font=("Helvetica", 11))
self.message.grid(row=8, column=0, pady=(20, 0))
elif self.text == "XML is not good":
self.message = Label(self.root, text= "Content validation is failed!", fg="red", font=("Helvetica", 11))
self.message.grid(row=8, column=0, pady=(20, 0))
else:
self.message = Label(self.root, text= "Warning: Click on “Validate Content“ button", fg="red", font=("Helvetica", 11))
self.message.grid(row=8, column=0, pady=(20, 0))
def run(self):
self.root.mainloop()
validator = TKValidator()
validator.text = "XML is good"
validator.run()
uj5u.com熱心網友回復:
my_warning在函式范圍之外定義一個變數,該變數為空,例如:
my_warning = ''
這應該可以解決您的問題。但仍不確定您將如何.cget取值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/361389.html
