簡體   English   中英

如何禁用 TKinter 滾動條小部件?

[英]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()

使滾動條以禁用外觀(而不是隱藏)顯示的另一種可能方法是:

  1. 刪除列表中的所有條目(滾動條將被禁用)
  2. 從列表中分離滾動條
  3. 在滾動條分離的情況下重新插入已刪除的條目(滾動條將保持禁用狀態)

在下面的代碼中,'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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM