使用Enthought的Canopy,tkinter radiobutton和mainloop在python3中无法正常工作

时间:2018-09-27 16:14:00

标签: python tkinter mainloop

我正在使用Enthought Canopy(用于数据采集)开发python程序。但是在python 3.5环境中使用tkinter时遇到问题。我无法使用var.get()函数来获取单选按钮的值。 (在使用整数时都将其定义为tk.IntVar()或在我的示例代码中都将其定义为tk.StringVar()

当按下退出按钮时,主循环也不会停止,tkinter窗口关闭,但是程序继续运行。

当切换到python 2.7环境时,我没有这些问题。下面是该代码的精简版本。

预先感谢您的帮助

import tkinter as tk

class GUI:
    def __init__ (self, master):
        self.master = master #Defining the root window

        #Create container
        frame = tk.Frame(master)

        #Defining the labels
        fontName = 'Helvetica 10'
        self.waveform = tk.StringVar()

        self.sawtoothRadio = tk.Radiobutton(frame, text='Sawtooth', 
                                                    variable=self.waveform, value="sawtooth")
        self.triangleRadio = tk.Radiobutton(frame, text='Triangle', 
                                                    variable=self.waveform, value="triangle")
        self.triangleRadio.select()
        self.startButton = tk.Button(frame, text="Start", font = fontName, command=self.calibrate)

        #Structuring the GUI
        self.sawtoothRadio.grid(row=9, column=0)
        self.triangleRadio.grid(row=9, column=1)
        self.startButton.grid(row=10, column=1)

        frame.pack(side=tk.LEFT)

    def draw_graph(self, right_frame):
        #Plotting the graph
        if self.waveform.get() == "sawtooth":
            sawtooth = True
        else:
            sawtooth = False

    def calibrate(self):
        #Plotting the graph
        if self.waveform.get() == "sawtooth":
            sawtooth = True
        else:
            sawtooth = False

root = tk.Tk()
newWindow = GUI(root)
root.mainloop()

1 个答案:

答案 0 :(得分:0)

所以我终于发现问题似乎出在Enthought的机盖上。

该程序可以在PyCharm和Anaconda的Spyder中正常运行,但是我仍然不知道是什么原因导致了Canopy中的问题。但是使用另一个IDE似乎可以解决问题。