python tkinter 勾选框_Python Tkinter网格复选框

我想知道是否有一种简单的方法来使用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,checkbox,grid,tkinter

来源: https://codeday.me/bug/20190609/1203992.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值