我正在使用 Tkinter 撰寫一些程式。這個想法是有一個主視窗,它通過按下按鈕來改變它的內容。如果內容發生了變化,我想創建一個“回傳”按鈕(從許多程式中都知道),它會回傳到主視窗。
我想過把視窗元素放在函式中,這樣“回傳”按鈕就會觸發函式創建主視窗。但是,例如,如果我按下“設定”按鈕,我希望主視窗的內容消失,以便為新內容騰出空間。問題是,我要洗掉的那些元素或 grid.forget() 位于不同的函式中,因此是區域變數。有沒有辦法改變它們?
這里有一些代碼示例:
"""Import"""
import sys
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import datetime
import json as js
from PIL import Image, ImageTk
"""Global variables"""
ACTIVATED = False
"""Functions"""
def main_window():
global canvas, image
root.configure(bg="white", padx=50, pady=50)
canvas.destroy()
canvas = tk.Canvas(width=100, height=100, bg="white", highlightthickness=0)
resized_image = image.resize((100, 100), Image.ANTIALIAS)
image = ImageTk.PhotoImage(resized_image)
logo = canvas.create_image((50, 50), image=image)
canvas.grid(row=0, column=0, columnspan = 4)
title = tk.Label(text="TEXT", bg="white", width=6, font=("Edwardian Script ITC", 50,))
title.grid(row=0, column=5, columnspan = 6, sticky = tk.E)
empty = tk.Label(text="", font=("Arial", 12, "bold"), bg="white", pady=10,)
empty.grid(row=1, column=1)
settings_button = tk.Button(text="Settings", command=settings)
settings_button.grid(row=2, column=0)
analyse_button = tk.Button(text="Analyse data", command=analyse)
analyse_button.grid(row=2, column=1)
def settings():
settings_button.grid.forget()
analyse_button.grid.forget()
back_button = tk.Button(text="back", command=main_window)
back_button.grid(row=2, column=1)
some new stuff
感謝您的善意建議。
uj5u.com熱心網友回復:
我建議將您的主視窗包裝到一個類中,而不是僅通過函式處理它。創建你的類的一個實體。您可以通過其屬性訪問所有要隱藏或顯示的元素等self.<element>。
我稍微修改了您的代碼,使其看起來像這樣:
"""Import"""
import sys
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import datetime
import json as js
from PIL import Image, ImageTk
class myClass():
"""Functions"""
def __init__(self):
self.ACTIVATED = False
self.root.configure(bg="white", padx=50, pady=50)
self.canvas = tk.Canvas(width=100, height=100, bg="white", highlightthickness=0)
self.resized_image = image.resize((100, 100), Image.ANTIALIAS)
self.image = ImageTk.PhotoImage(resized_image)
self.logo = canvas.create_image((50, 50), image=image)
self.canvas.grid(row=0, column=0, columnspan = 4)
self.title = tk.Label(text="TEXT", bg="white", width=6, font=("Edwardian Script ITC", 50,))
self.title.grid(row=0, column=5, columnspan = 6, sticky = tk.E)
self.empty = tk.Label(text="", font=("Arial", 12, "bold"), bg="white", pady=10,)
self.empty.grid(row=1, column=1)
self.settings_button = tk.Button(text="Settings", command=settings)
self.settings_button.grid(row=2, column=0)
self.analyse_button = tk.Button(text="Analyse data", command=analyse)
self.analyse_button.grid(row=2, column=1)
def settings(self):
self.settings_button.grid.forget()
self.analyse_button.grid.forget()
self.back_button = tk.Button(text="back", command=main_window)
self.back_button.grid(row=2, column=1)
some new stuff
myObject = myClass()
#call when needed
myObject.settings()
本文僅與您的問題有些相關,但它很好地展示了這個概念。
編輯:格里斯馬爾在他的評論中所說的,即改變/重寫整個結構,是一個非常好的觀點,而且從長遠來看絕對是正確的解決方案。我的目標是保持你的結構并與之合作。不過,我必須指出,我完全同意 Grismars 的觀??點!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/490116.html
