Python Tkinter网格复选框
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python Tkinter网格复选框,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2374字,纯文字阅读大概需要4分钟。
内容图文
![Python Tkinter网格复选框](/upload/InfoBanner/zyjiaocheng/809/a74f60c74baa4305995bc0796c8fdf37.jpg)
我想知道是否有一种简单的方法来使用Tkinter创建一个复选框网格.我正在尝试制作10行和10列的网格(所以100个复选框),这样每行只能选择两个复选框.
编辑:我正在使用spthon的python 2.7
到目前为止我所拥有的:
from Tkinter import*
master = Tk()
master.title("Select Groups")
rows=10
columns=10
for x in range(rows):
for y in range(columns):
Label(master, text= "Group %s"%(y+1)).grid(row=0,column=y+1)
Label(master, text= "Test %s"%(x+1)).grid(row=x+1,column=0)
Checkbutton(master).grid(row=x+1, column=y+1)
mainloop()
一旦选中了两个复选框,我正在尝试使用state =’Disabled’来使行变灰.
解决方法:
以下是使用您提供的10×10网格的示例.它应该为您提供如何实现它的基本概念.
只需确保保留对每个Checkbutton(示例中的框)以及每个IntVar(示例中的boxVars)的引用.
原因如下:
-Chckbuttons需要调用config(state = DISABLED / NORMAL).
-IntVars需要确定每个Checkbutton的值.
除了那些关键元素,它基本上只是一些2D数组处理.
这是我的示例代码(现在基于您提供的代码).
from Tkinter import *
master = Tk()
master.title("Select Groups")
rows=10
columns=10
boxes = []
boxVars = []
# Create all IntVars, set to 0
for i in range(rows):
boxVars.append([])
for j in range(columns):
boxVars[i].append(IntVar())
boxVars[i][j].set(0)
def checkRow(i):
global boxVars, boxes
row = boxVars[i]
deselected = []
# Loop through row that was changed, check which items were not selected
# (so that we know which indeces to disable in the event that 2 have been selected)
for j in range(len(row)):
if row[j].get() == 0:
deselected.append(j)
# Check if enough buttons have been selected. If so, disable the deselected indeces,
# Otherwise set all of them to active (in case we have previously disabled them).
if len(deselected) == (len(row) - 2):
for j in deselected:
boxes[i][j].config(state = DISABLED)
else:
for item in boxes[i]:
item.config(state = NORMAL)
def getSelected():
selected = {}
for i in range(len(boxVars)):
temp = []
for j in range(len(boxVars[i])):
if boxVars[i][j].get() == 1:
temp.append(j + 1)
if len(temp) > 1:
selected[i + 1] = temp
print selected
for x in range(rows):
boxes.append([])
for y in range(columns):
Label(master, text= "Group %s"%(y+1)).grid(row=0,column=y+1)
Label(master, text= "Test %s"%(x+1)).grid(row=x+1,column=0)
boxes[x].append(Checkbutton(master, variable = boxVars[x][y], command = lambda x = x: checkRow(x)))
boxes[x][y].grid(row=x+1, column=y+1)
b = Button(master, text = "Get", command = getSelected, width = 10)
b.grid(row = 12, column = 11)
mainloop()
内容总结
以上是互联网集市为您收集整理的Python Tkinter网格复选框全部内容,希望文章能够帮你解决Python Tkinter网格复选框所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。