#python #python-3.x #tkinter
#python #python-3.x #tkinter
Вопрос:
Я новичок в python и пытаюсь создать приложение, в котором я хочу, чтобы кнопка была видна только после того, как я нажму кнопку «показать». Кнопка не должна быть видна с самого начала приложения, она должна быть видна только после нажатия на кнопку «показать».
У меня есть этот код, который скрывает кнопку после нажатия на другую кнопку. Он изменяет свой текст на «показать» после скрытия кнопки.
from tkinter import *
root = Tk()
btn1 = Button(root,text="Example")
btn1.visible = True
btn1.place(x=20, y=50)
btn1.pi = btn1.place_info()
btn3 = Button(root, text="click me", command=lambda:plugin())
btn3.place(x=20, y=150)
def plugin():
master = Tk()
def toggle1():
if btn1.visible:
btnToggle1["text"] = "Show Example"
print ("Now you don't")
btn1.place_forget()
else:
btn1.place(btn1.pi)
print ("Now you see it")
btnToggle1["text"] = "Hide Example"
btn1.visible = not btn1.visible
btnToggle1 = Button(master, text="Hide Example", command=toggle1)
btnToggle1.place(x=70, y=150)
master.mainloop()
root.mainloop()
Я хочу, чтобы кнопка отображалась только после того, как я нажму на кнопку «показать», а не с самого начала.
Ответ №1:
Рискуя заявить очевидное, если вы не хотите, чтобы кнопка была видна при запуске, не показывайте кнопку при запуске.
Вы явно делаете кнопку видимой с помощью этой строки кода рядом с началом программы:
btn1.place(x=20, y=50)
Затем вы настраиваете btn1.pi
с помощью вызова place_info
, но вам не нужно этого делать. Вы можете установить напрямую, btn1.p
без предварительного вызова .place
с последующим place_info
.
btn1 = Button(root,text="Example")
btn1.visible = False
btn1.pi = {"x": 20, "y": 50}
Обратите внимание, что я также изменил btn1.visible
на False . На самом деле вам не нужен отдельный атрибут, чтобы отслеживать, виден ли он, tkinter может ответить на этот вопрос с помощью метода winfo_viewable()
.
Или вы можете просто удалить кнопку после вычисления btn1.pi
:
btn1.place(x=20, y=50)
btn1.visible = False
btn1.pi = btn1.place_info()
btn1.place_forget()
Ответ №2:
Я знаю, что это не по вопросу, мне было трудно найти это. Если вы используете библиотеку GTK, то ButtonName.set_visible(False)
установите ее невидимой
приведенное ниже предназначено для tkinter, я только что протестировал приведенное ниже для tkinter:
from tkinter import *
def hide_me(event):
event.widget.pack_forget()
def make_invisible(widget):
widget.pack_forget()
root = Tk()
btn=Button(root, text="Click")
btn.bind('<Button-1>', hide_me)
btn.pack()
btn2=Button(root, text="Click too")
btn2.bind('<Button-1>', hide_me)
btn2.pack()
make_invisible(btn2)
root.mainloop()
make_invisible(btn2)
метод делает ее невидимой, однако обязательно вызывайте ее после упаковки кнопки, иначе она все равно будет отображаться.
вот мои ресурсы, которые я использовал, чтобы добраться до этого кода
https://www.tutorialspoint.com/how-to-make-a-tkinter-widget-invisible
и https://newbedev.com/in-tkinter-is-there-any-way-to-make-a-widget-not-visible
Комментарии:
1. Они не используют GTK
Ответ №3:
я надеюсь, что это то, что вы имеете в виду:
from tkinter import *
import tkinter
root = Tk()
btn1 = Button(root,text="Example")
btn1.visible = True
btn1.place(x=20, y=50)
btn1.pi = btn1.place_info()
btn3 = Button(root, text="click me", command=lambda:plugin())
btn3.place(x=20, y=150)
def plugin():
master = Tk()
def toggle1():
if btn1.visible:
btnToggle1["text"] = "Show Example"
btnToggle1["state"] = DISABLED
print ("Now you don't")
btn1.place_forget()
else:
btn1.place(btn1.pi)
print ("Now you see it")
btnToggle1["state"] = NORMAL
btnToggle1["text"] = "Hide Example"
btn1.visible = not btn1.visible
btnToggle1 = Button(master, text="Hide Example", command=toggle1)
btnToggle1.place(x=70, y=150)
master.mainloop()
root.mainloop()
Комментарии:
1. На самом деле, это меняет не видимость, а скорее кликабельность. Является ли кнопка интерактивной или нет.