我正在用GUI编写一个单线程程序,该程序执行一系列任务。在执行这些任务期间,会定期刷新GUI以检查一些可用输入(例如中止)。为避免因不必要的输入而中止任务,在执行过程中,所有.config(state='disabled')
会禁用所有不必要的GUI元素。
但是,由于某些原因,滚动条是唯一的,并且没有"-state"
选项。
答案 0 :(得分:0)
我认为您无法使用-state
选项禁用滚动条小部件,我已经在Tcl/Tk网站上进行了搜索,但没有找到任何相关信息。
但是我敢肯定,如果您使用的是pack_forget()几何图形,则可以使用pack方法将其从窗口中删除;如果您使用的是{{3},则可以是grid_forget() }几何图形,因此以后可以再次显示滚动条小部件,再次调用pack/grid
。
这是一个例子:
from tkinter import *
master = Tk()
scrollbar = Scrollbar(master)
scrollbar.pack(side=RIGHT, fill=Y)
def disable_scroll():
scrollbar.pack_forget()
def active_scroll():
scrollbar.pack(side=LEFT, fill=BOTH)
scrollbar.config(command=None)
btn1 = Button(master, text="OK 1", command=disable_scroll)
btn1.pack()
btn2 = Button(master, text="OK 2", command=active_scroll)
btn2.pack()
listbox = Listbox(master, yscrollcommand=scrollbar.set)
for i in range(1000):
listbox.insert(END, str(i))
listbox.pack(side=LEFT, fill=BOTH)
scrollbar.config(command=listbox.yview)
mainloop()
滚动条根据列表框的值而变化,所以正如我所说的那样,这是代码:
from tkinter import *
import random
master = Tk()
scrollbar = Scrollbar(master)
scrollbar.pack(side=RIGHT, fill=Y)
def disable_scroll():
scrollbar.pack_forget()
def active_scroll():
scrollbar.pack(side=LEFT, fill=BOTH)
scrollbar.config(command=None)
btn1 = Button(master, text="disable_scroll", command=disable_scroll)
btn1.pack()
btn2 = Button(master, text="active_scroll", command=active_scroll)
btn2.pack()
listbox = Listbox(master, yscrollcommand=scrollbar.set)
#NEW FUNCTIONS
def count():
listbox.delete(0, END)
lista = [5, 8, 500, 1000]
for i in range(random.choice(lista)):
listbox.insert(END, str(i))
def delete():
listbox.delete(0, END)
#NEW BUTTONS
btn3 = Button(master, text="start", command=count)
btn3.pack()
btn4 = Button(master, text="delete", command=delete)
btn4.pack()
listbox.pack(side=LEFT, fill=BOTH)
scrollbar.config(command=listbox.yview)
mainloop()
答案 1 :(得分:0)
使滚动条以禁用外观(而不是隐藏)显示的另一种可能方法是:
在下面的代码中,“ listbox”是我的tk.Listbox对象,“ scrollbar”是关联的“ tk.Scrollbar”对象,而self是对父对象的引用。在Windows上使用Python 3.8.4rc1测试了代码。
禁用代码:
entries = listbox.get(0, "end")
listbox.delete(0, "end")
self.update()
listbox.config(yscrollcommand="")
scrollbar.config(command="")
listbox.insert("end", *entries)
listbox['state'] = "disabled"
启用代码:
listbox['state'] = "normal"
listbox.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=listbox.yview)