我在 python 中有一個程式,我在其中使用串列框、按鈕和標簽。所以今天我遇到了一個問題。我想讓我的串列框在單擊按鈕時出現,并在再次單擊相同按鈕時消失。我怎樣才能做到這一點?我嘗試使用該winfo_ismapped()方法,但似乎沒有用。我想我可能做了一些瘋狂的事情。如果是這樣,請指出并給我一個更正的答案。否則請告訴我更好的方法。
我的代碼:
import tkinter as tk
from tkinter import *
root = tk.Tk()
root.geometry('500x500')
def showMenu():
overlay = Listbox(root, bg="green", height=22, width=58)
if overlay.winfo_ismapped() == 0:
overlay.place(x=0,y=35)
else:
overlay.placeforget()
button = tk.Button(root,text="place/remove", command=showMenu)
button.place(x=0,y=0)
root.mainloop()
實際上,當我按下按鈕時它會出現,但在我再次按下它后會隱藏。
同樣,我對這些標簽也有另一個問題。
代碼:
import tkinter as tk
root = tk.Tk()
def placeFun():
successtext = tk.Label(root, text="Success", anchor='nw', bg="#212121", fg="#ff3300",font=("Consolas", 15, "bold"))
if successtext.winfo_ismapped() == 0:
successtext.place(x=0,y=50)
else:
succestext.forget()
button = tk.Button(root, text='place/rem', width=25, command=placeFun)
button.place(x=0,y=0)
root.mainloop()
請注意:我想要一種專業的方式來處理這個問題,我這么說是因為,我知道我們使用變數的方式,例如:
globalvartimes = 0
def somefunc():
if times % 2 == 0:
show the listbox
global times
times = 2
else:
remove the listbox
times = 1
*這會在times偶數時顯示串列框,并在奇數時將其洗掉。
這些使代碼看起來不專業且冗長。
uj5u.com熱心網友回復:
問題是每次showMenu()呼叫Listbox都會創建另一個。要解決此問題,請創建Listbox函式的外部(因此它是全域的)。
(我還注意到你拼錯了place_forget()方法的名稱。)
import tkinter as tk
from tkinter import *
root = tk.Tk()
root.geometry('500x500')
def showMenu():
if overlay.winfo_ismapped() == 0:
overlay.place(x=0,y=35)
else:
overlay.place_forget()
overlay = Listbox(root, bg="green", height=22, width=58)
button = tk.Button(root,text="place/remove", command=showMenu)
button.place(x=0,y=0)
root.mainloop()
這看起來也是您的Label示例有問題的地方。
注意:如果您想撰寫“專業”代碼,我建議您閱讀(并開始關注)
PEP 8 - Python 代碼樣式指南。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/479810.html
上一篇:tkinter中的文本
下一篇:為什么滾動條不會顯示在串列框上?
