如何在jupyter或spyder中使用ipython控制台启用回调函数?

时间:2017-08-28 19:19:41

标签: python user-interface

我是python的新手,我正在尝试制作我的第一个GUI。我有一个回调函数,我试图执行,根据Radiobutton按下的内容更改GUI窗口的背景颜色。这是代码:

import tkinter as tk

win = tk.Tk()
win.title("Python GUI")
colors = ["Blue", "Gold", "Red"]

def radCall():
    radSel=radVar.get()
    if   radSel == 0: win.configure(background=colors[0])
    elif radSel == 1: win.configure(background=colors[1])
    elif radSel == 2: win.configure(background=colors[2])

radVar = tk.IntVar()

radVar.set(99)

for col in range(3):
    curRad = 'rad' + str(col)
    curRad = tk.Radiobutton(win, text=colors[col], variable=radVar, value=col, command=radCall)
    curRad.grid(column=col, row=6, sticky=tk.W)

win.mainloop()

当我在文本编辑器中编写脚本后执行脚本时,它运行得很好但是当我尝试在spyder或jupyter笔记本等交互式环境中执行相同的代码(减去win.mainloop)时,无线电按钮会出现但是它们会出现不执行背景颜色更改。我怀疑这与它涉及回调函数的事实有关,但我并不积极。我应该如何编辑代码以使其在交互式shell中工作,或者更好地设置我的交互式环境以使用回调函数?

1 个答案:

答案 0 :(得分:0)

尝试在Spyder中运行代码,首先要说:

  1. 要启动该程序,您必须使用mainloop()

  2. 我使用/不使用win.mainloop运行代码并注意到没有win.mainloop,代码运行但由于点1而没有创建GUI。使用win.mainloop(),注意到窗口很小,所以我不得不扩展它以查看更改,否则虽然它不起作用。建议是增加窗口大小或设置最小大小,例如win.minsize(width=XXX,height=XXX)

  3. 最好使用:

    如果名称 =='主要': win.mainloop()

  4. 除非您提供更多解释,否则无法在没有.mainloop()

    的情况下运行该程序