python - Python - Tkinter:如何在循环中创建单选按钮?
问题描述
您好,我正在尝试为每个问题创建一个包含 5 个选项的问卷。由于我有很多问题,我想在循环中创建标签和单选按钮。但是,我不能在循环中调用 tkinter 的 mainloop() 函数,因此当我在循环外部调用它时,我在任何问题的问卷上的选择都会成为最后一个问题的答案。我怎样才能解决这个问题?
def selected(value, question):
answer_values[question-1] = value
print(value, question)
root = Tk()
root.title('Kişilik Analiz Testi')
answers = {}
for x in range(0, enneagram.shape[0]):
soru = str(x+1) + ". " + enneagram.SORULAR[x] + " Cümlesi sizi ne kadar iyi ifade ediyor?"
myLabel = Label(root, text = soru).grid(row = x+1, column = 1, sticky = W)
Label(root, text = "Sorular").grid(row = 0, column = 1, sticky = W)
Label(root, text = "Çok Zayıf ").grid(row = 0, column = 2)
Label(root, text = "Zayıf ").grid(row = 0, column = 3)
Label(root, text = "Orta ").grid(row = 0, column = 4)
Label(root, text = " İyi ").grid(row = 0, column = 5)
Label(root, text = "Çok İyi").grid(row = 0, column = 6)
answers["soru{0}".format(x)] = IntVar()
answers["soru{0}".format(x)].set(3)
button = Radiobutton(root, variable = answers["soru{0}".format(x)], value = 1, command = lambda: selected(1, x+1)).grid(row = x+1, column = 2)
button = Radiobutton(root, variable = answers["soru{0}".format(x)], value = 2, command = lambda: selected(2, x+1)).grid(row = x+1, column = 3)
button = Radiobutton(root, variable = answers["soru{0}".format(x)], value = 3, command = lambda: selected(3, x+1)).grid(row = x+1, column = 4)
button = Radiobutton(root, variable = answers["soru{0}".format(x)], value = 4, command = lambda: selected(4, x+1)).grid(row = x+1, column = 5)
button = Radiobutton(root, variable = answers["soru{0}".format(x)], value = 5, command = lambda: selected(5, x+1)).grid(row = x+1, column = 6)
root.mainloop()
解决方案
试试这个代码:
import tkinter as tk
from functools import partial
def function(i):
print("You toggled number %i"%i)
print([var.get() for var in variables])
root = tk.Tk()
variables = []
for i in range(5):
# Create the new variable
variable = tk.IntVar()
variables.append(variable)
# Create the command using partial
command = partial(function, i)
# Create the radio button
button = tk.Radiobutton(root, variable=variable, value=i, command=command)
button.pack()
root.mainloop()
它使用partial
来自functools
.
推荐阅读
- javascript - 当我在图像标签中使用它时,从 iphone 拍摄的图像被旋转
- r - 按 r 中 data.table 中的组累积识别新值
- reactjs - 如何使用 ReactJS 删除带有 id 滑块的 div?
- python - 在 for 循环中将计数器值与相应的计数器键功能相乘
- dotnetnuke - 如何获取用于微数据的绝对 DNN 门户徽标 URL 路径?
- javascript - 在 URL 的某个路径上时重定向
- java - java.lang.IllegalStateException:此 VM 中已存在与分布式系统的连接。它具有以下配置:
- excel - 将数据从一列复制到范围内的下一个空列
- javascript - 在嵌套循环中处理承诺
- android - 压缩 React Native 应用程序的大小