2017-07-15 39 views
1

我是Python的新手,显然在使用checkbutton时丢失了一些重要的东西。这是我的程序背后的想法:我手动选择一个文件,然后根据复选框是否被选中,使用按钮触发一个计算序列或另一个计算序列。为了达到这个目的,我想使用.get()命令来验证复选框的状态。同时使用一个checkbutton和一个按钮

我发现的是,只有一个序列始终独立于复选框的状态而被触发。 .get()没有更新,当我点击复选框。我究竟做错了什么?任何帮助将不胜感激。

from tkinter import * 
from tkinter import filedialog 
import tkinter as tk 

master = Tk() 
root = tk.Tk() 

col_sep = "\t" 

col_h_b = [] # field column for background 
col_m_b = [] # magnetization column for background 

def choose_b_file(): 
    root.fileName_b = filedialog.askopenfilename(filetypes=((".dat files", "*.dat"), ("All files", "*.*"))) 
    with open(root.fileName_b, 'r') as f: 
     for line in f: 
      if line[0] != "#": 
       linedata = [float(line.split(col_sep)[i]) for i in range(len(line.split(col_sep)))] 
       col_h_b.append(linedata[4]) 
       col_m_b.append(linedata[5]) 
    print(f.name) 

offset = BooleanVar() 
checkbox = tk.Checkbutton(root, text="offset subtraction", variable=offset,onvalue=1, offvalue=0) 
checkbox.pack() 

def plot(): 
    if offset.get() == 1: 
     #some mathematical operations and graph plotting 
    else: 
     #other mathematical operations and graph plotting 

def close_window(): 
    exit() 

b_data = Button(master, text="Background", width=20, command=choose_b_file) 
m_minus_b = Button(master, text="Plot", width=5, command=plot) 
quit = Button(master, text="Quit", width=5, command=close_window) 

b_data.pack() 
m_minus_b.pack() 
quit.pack() 

root.mainloop() 

回答

1

你多半搞乱父母部件rootmaster。 您需要为复选框设置单独的窗口吗?

否则,速战速决是master中的复选框创建更换root

checkbox = tk.Checkbutton(root, text="offset subtraction" ...) 

您还可以简化布尔的东西,对于checkbutton的默认行为是使用0和1,并取出主或根,只选一个。

from tkinter import * 
from tkinter import filedialog 

root = Tk() 

col_sep = "\t"  
col_h_b = [] # field column for background 
col_m_b = [] # magnetization column for background 

def choose_b_file(): 
    root.fileName_b = filedialog.askopenfilename(filetypes=((".dat files", "*.dat"), ("All files", "*.*"))) 
    with open(root.fileName_b, 'r') as f: 
     for line in f: 
      if line[0] != "#": 
       linedata = [float(line.split(col_sep)[i]) for i in range(len(line.split(col_sep)))] 
       col_h_b.append(linedata[4]) 
       col_m_b.append(linedata[5]) 
    print(f.name) 

def plot(): 
    if offset.get() == 1: 
     print('True') 
     #some mathematical operations and graph plotting 
    else: 
     print('False') 
     #other mathematical operations and graph plotting 

def close_window(): 
    exit() 

offset = IntVar() 
checkbox = Checkbutton(root, text="offset subtraction", variable=offset) 
checkbox.pack() 

b_data = Button(root, text="Background", width=20, command=choose_b_file) 
m_minus_b = Button(root, text="Plot", width=5, command=plot) 
quit = Button(root, text="Quit", width=5, command=close_window) 

b_data.pack() 
m_minus_b.pack() 
quit.pack() 

root.mainloop() 
+0

非常感谢@PrMoureu!这就是诀窍!事实上,我还试图弄清楚如何在同一窗口中显示复选框和按钮。所以你在一篇文章中解决了这两个问题:-) – DenGor

相关问题