Как добавить необычный контрольный список в Tkinter? - PullRequest
0 голосов
/ 10 октября 2019

Попытка создать меньший скрипт по сравнению с моим.

Мой текущий код:

var1 = IntVar()
var1_2 = IntVar()
var2 = IntVar()
var2_2 = IntVar()

self.Check1 = Checkbutton(main, text="Option 1", variable=var1)
self.Check1.grid(column = 2, row = 1, sticky = W)

self.Check1_2 = Checkbutton(main, variable=var1_2)
self.Check1_2.grid(column = 1, row = 1, sticky = W)

self.Check2 = Checkbutton(main, text="Option 2", variable=var2)
self.Check2.grid(column = 2, row = 2, sticky = W)

self.Check2_2 = Checkbutton(main, variable=var2_2)
self.Check2_2.grid(column = 1, row = 2, sticky = W)

это очень долго, и я знаю, что могу сократить его. но не уверен как. Вот где я добрался и остановился, потому что я не очень уверен, куда идти дальше:

info = ["Option 1", "Option 2"]

vars = []
for i in info:
 var = IntVar(value=0)
 vars.append(var)
 btn = Checkbutton(main, text=i, 

1 Ответ

0 голосов
/ 10 октября 2019

Попробуйте это

import tkinter as tk

main = tk.Tk()

info = ["Option 1", "Option 2","Option 3", "Option 4"]

vars = []
for idx,i in enumerate(info):
    var = tk.IntVar(value=0)
    vars.append(var)
    btn = tk.Checkbutton(main, text=i, var = var)     
    btn.grid(column=idx%2,row=idx//2)

main.mainloop()

Я добавил перечисление в цикл for, чтобы каждому элементу было присвоено число idx, т. Е. 0,1,2,3 и т. Д.

Я также использовал несколько простых вычислений для позиционирования каждого флажка, исходя из предположения, что вы хотите, чтобы в каждом ряду было два флажка, используя операторы деления на модуль и целочисленное значение.

Учитывая ваши комментарии к моему первоначальному ответу, я подозреваю, что вы хотитеиспользуйте переключатели вместо кнопок проверки. Они поддерживают возможность включения только одного из них одновременно. Смотрите пример ниже, чтобы узнать, как этого добиться. Радиокнопки поддерживают сохранение другого значения в IntVar в зависимости от того, какое из них выбрано, и снимет флажок, если выбрано другое.

import tkinter as tk

main = tk.Tk()

info = ["Option 1", "Option 2","Option 3", "Option 4"]

vars = []
for idx,i in enumerate(info):
    var = tk.IntVar(value=0)
    vars.append(var)
    lblOption = tk.Label(main,text=i)
    btnYes = tk.Radiobutton(main, text="Yes", variable=var, value=1)
    btnNo = tk.Radiobutton(main, text="No", variable=var, value=0)
    lblOption.grid(column=0,row=idx)
    btnYes.grid(column=1,row=idx)
    btnNo.grid(column=2,row=idx)

main.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...