[英]How to disable a TKinter scrollbar widget?
我正在編寫一個帶有 GUI 的單線程程序,它執行一系列任務。 在這些任務期間,GUI 會定期刷新以檢查一些可用的輸入(例如中止)。 為了避免使用不需要的輸入停止任務,所有不必要的 GUI 元素在執行過程中都被.config(state='disabled')
。 然而,這似乎不適用於由於某種原因是獨特的並且沒有"-state"
選項的滾動條。
我認為您不能使用-state
選項禁用滾動條小部件,我在Tcl/Tk網站上搜索過,但沒有找到任何相關信息。
但是我確信如果您使用的是包幾何圖形或grid_forget()如果您使用的是網格幾何圖形,您可以使用pack_forget()方法將其從窗口中刪除,因此您可以稍后再次顯示滾動條小部件調用pack/grid
再次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()
使滾動條以禁用外觀(而不是隱藏)顯示的另一種可能方法是:
在下面的代碼中,'listbox' 是我的 tk.Listbox 對象,'scrollbar' 是關聯的 'tk.Scrollbar' 對象,而 self 是對父對象的引用。 使用 Python 3.8.4rc1 在 Window 上測試的代碼。
禁用代碼:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.