Tkinter winfo_ismapped() 方法不起作用
Tkinter winfo_ismapped() method not working
我在 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
为偶数时显示列表框,当它为奇数时将其移除。
这些让代码看起来不专业而且很长
问题是每次调用 showMenu()
都会创建另一个 Listbox
。要解决此问题,请创建函数的 Listbox
outside(因此它是全局的)。
(我还注意到您拼错了 place_forget()
方法的名称。)
import tkinter as tk
from tkinter import *
root = tk.Tk()
root.geometry('500x500')
def showMenu():
if overlay.winfo_ismapped(): # Placed?
overlay.place_forget()
else:
overlay.place(x=0,y=35)
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 - Style Guide for Python Code.
我在 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
为偶数时显示列表框,当它为奇数时将其移除。
这些让代码看起来不专业而且很长
问题是每次调用 showMenu()
都会创建另一个 Listbox
。要解决此问题,请创建函数的 Listbox
outside(因此它是全局的)。
(我还注意到您拼错了 place_forget()
方法的名称。)
import tkinter as tk
from tkinter import *
root = tk.Tk()
root.geometry('500x500')
def showMenu():
if overlay.winfo_ismapped(): # Placed?
overlay.place_forget()
else:
overlay.place(x=0,y=35)
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 - Style Guide for Python Code.