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.