繁体   English   中英

带有 Tkinter 的 Python 中带有 CheckButtons 的列表框

[英]ListBox with CheckButtons in python with Tkinter

这是使用 Tkinter 在列表框中定义滚动条的代码:

import tkinter as tk

root = tk.Tk()

scrollbar = tk.Scrollbar(root)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

listbox = tk.Listbox(root)
listbox.pack()

for i in range(50):
  listbox.insert(tk.END, i)

listbox.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=s.set)

root.mainloop()

我想修改此代码以使其具有带复选按钮的滚动条,我知道我无法用复选按钮填充列表框,因为列表框只能包含文本

scrollbar = tk.Scrollbar(self)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
categories = ["aaa","bbb","ccc"]
for i in categories:
    var[i] = tk.IntVar()
    chk = tk.Checkbutton(self, text=i, variable=var[i], width=20)
    #chk.select()
    chk.pack()

scrollbar.config(command=s.set)

如何使我的 Checkbuttons“可滚动”?

最常见的选择是将复选按钮放在框架中,然后将框架放在画布中,因为画布是可滚动的。 有几个例子,包括这个问题: 将滚动条添加到 Tkinter 中的一组小部件

在处理垂直堆叠的小部件的情况下,一个简单的解决方案是将复选按钮嵌入文本小部件中,因为文本小部件支持嵌入的小部件和垂直滚动。

例子:

import tkinter as tk

root = tk.Tk()

scrollbar = tk.Scrollbar(root)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

checklist = tk.Text(root, width=20)
checklist.pack()

vars = []
for i in range(50):
    var = tk.IntVar()
    vars.append(var)
    checkbutton = tk.Checkbutton(checklist, text=i, variable=var)
    checklist.window_create("end", window=checkbutton)
    checklist.insert("end", "\n")

checklist.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=checklist.yview)

# disable the widget so users can't insert text into it
checklist.configure(state="disabled")

root.mainloop()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM