2017-08-28 47 views
1

我是相对较新的python,我试图让我的第一个GUI。我有一个回调函数,我尝试执行该操作,它改变了GUI窗口的背景颜色,具体取决于Radiobutton的按下情况。下面是代码:如何在jupyter或spyder中使用ipython控制台启用回调函数?

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的执行相同的代码(减去win.mainloop)或jupyter笔记本,则会出现单选按钮,但不会执行背景颜色更改。我怀疑这与它涉及回调函数的事实有关,但我不积极。我应该如何编辑我的代码以使其在交互式shell中工作,或者更好地设置使用回调函数的交互式环境?

回答

0

试图运行你的代码的Spyder和第一得说:

  1. 要开始,你必须使用主循环程序()

  2. 我跑了/代码没有win.mainloop并注意到没有win.mainloop,代码会运行但不会创建GUI,因为第1点。使用win.mainloop(),注意到窗口很小,所以我必须展开才能看到更改,否则它是不工作。建议增加窗口大小或设置最小大小,例如win.minsize(width=XXX,height=XXX)

  3. 最好使用:

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

除非你给予更多的解释,你无法运行程序没有.mainloop()

+0

感谢您的回复。我忘了提及在运行代码时添加%gui tk,以便GUI随代码动态变化。我认为它可能与回调有关的原因是我认为问题出现在代码的radVar.get()部分。似乎无法解决此问题,因此它使用回调函数来检索它。 –

+0

在定义'win = tk.TK()'时,顶部定义'radVar = tk.IntVar()'怎么办? – deaspo

+0

试过,也没有运气。感谢您的建议 –

相关问题