填充时Tkinter检查按钮的干扰

时间:2019-08-18 15:55:07

标签: python user-interface tkinter

我正在做g.u.i。与tkinter。我目前正在尝试使用几个复选按钮制作几个标签框架。问题在于,一个复选框在一个窗口中被选中,另一个窗口也被选中。

我一直在寻找类似的问题,但没有发现。作为一个初学者,我真的不明白问题出在哪里。

import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
from scipy.stats import linregress
import pandas as pd

window= tk.Tk()
#creating the  2 labelframes
models = tk.LabelFrame(window, text="Models", padx=10, pady=10)
models.grid(padx=10, pady=10, sticky='W')
param = tk.LabelFrame(window, text="params", padx=10, pady=10)
param.grid(column=0, row=10, sticky='W', padx= 10)
# adding checkbuttons to the first labelframe
lin_cb = tk.Checkbutton(models, text="linear regression")
lin_cb.grid(column=0, row=2, sticky='W')
nlin_cb = tk.Checkbutton(models, text="non-linear regression")
nlin_cb.grid(column=0, row=5, sticky='W')
#labels for second labelframe
tk.Label(param, text="substate").grid(row=1, sticky='W')
tk.Label(param, text="velocity").grid(row=2, sticky='W')
tk.Label(param, text="if inhibited").grid(row=3, sticky='W')
tk.Label(param, text="inibitor").grid(row=4, sticky='W')
#checkbutton
su_M=tk.Checkbutton(param, text='M')
su_M.grid(column=1, row=1, sticky='W')
su_mM=tk.Checkbutton(param, text='mM')
su_mM.grid(column=2, row=1, sticky='W')

window.mainloop()

在继续执行程序之前,请先了解如何解决此问题。谢谢大家。希望我能给您所有必要的信息。我试图尽可能地总结代码。

1 个答案:

答案 0 :(得分:0)

要使用Checkbutton,您需要创建tkinter变量并将其与每个Checkbutton关联。

import tkinter as tk

window= tk.Tk()
models = tk.LabelFrame(window, text="Models", padx=10, pady=10)
models.grid(padx=10, pady=10, sticky='W')
param = tk.LabelFrame(window, text="params", padx=10, pady=10)
param.grid(column=0, row=10, sticky='W', padx= 10)

all_vars = [tk.IntVar() for _ in range(4)] #create 4 IntVars in one go
for i in all_vars : #set all vars to 0
    i.set(0)

lin_cb = tk.Checkbutton(models, text="linear regression",variable=all_vars[0])  #set variable for each checkbutton
lin_cb.grid(column=0, row=2, sticky='W')
nlin_cb = tk.Checkbutton(models, text="non-linear regression",variable=all_vars[1])
nlin_cb.grid(column=0, row=5, sticky='W')

tk.Label(param, text="substate").grid(row=1, sticky='W')
tk.Label(param, text="velocity").grid(row=2, sticky='W')
tk.Label(param, text="if inhibited").grid(row=3, sticky='W')
tk.Label(param, text="inibitor").grid(row=4, sticky='W')

su_M=tk.Checkbutton(param, text='M',variable=all_vars[2])
su_M.grid(column=1, row=1, sticky='W')
su_mM=tk.Checkbutton(param, text='mM',variable=all_vars[3])
su_mM.grid(column=2, row=1, sticky='W')

window.mainloop()