2017-08-28 162 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

試過,也沒有運氣。感謝您的建議 –

相關問題