2016-09-28 93 views
0

我目前正在編寫一個使用Tkinter爲用戶提供圖形界面的應用程序。Tkinter複選框「名稱未定義」

該應用程序運行良好,最近我決定添加一些複選框,這個想法是當用戶選中其中一個框時,另一組文本通過API發送。

我有我能夠得到很好地工作,但由於某種原因,每當我嘗試和檢索複選框的值輸入框,我得到以下錯誤:

 if check.get(): 
NameError: name 'check' is not defined 

對於生活我無法弄清楚爲什麼會出現這個錯誤,這裏是我的代碼的其餘部分,爲了使它更清晰,我刪除了輸入框的工作代碼。

from tkinter import * 

class GUI: 
    def __init__(self, master): 
     check = IntVar() 



     self.e = Checkbutton(root, text="check me", variable=check) 
     self.e.grid(row=4, column=2) 

     self.macro_button = Button(master, text="Test Button", command=self.test) 
     self.macro_button.grid(row=11, column=1) 



     def test(self): 
      if check.get(): 
       print('its on') 
      else: 
       print('its off') 



root = Tk() 
root.resizable(width=False, height=False) 
my_gui = GUI(root) 
root.mainloop() 

當運行該代碼,然後按標有「測試按鈕」按鈕,即當誤差出現在我的終端。

任何人都有任何想法爲什麼這發生在我的複選框,而不是我的inputboxes?

編輯:

什麼是對我來說更奇怪的是,這個代碼,我發現在網上進行教你如何使用Tkinter的複選框的工作就像一個魅力,它幾乎等同於雷:

import tkinter as tk 

root = tk.Tk() 

var = tk.IntVar() 
cb = tk.Checkbutton(root, text="the lights are on", variable=var) 
cb.pack() 

def showstate(): 
    if var.get(): 
     print ("the lights are on") 
    else: 
     print ("the lights are off") 

button = tk.Button(root, text="show state", command=showstate) 
button.pack() 

root.mainloop() 

回答

1

你只需要讓check變成一個實例變量self

class GUI: 
    def __init__(self, master): 
     self.check = IntVar() 



     self.e = Checkbutton(root, text="check me", variable=self.check) 
     self.e.grid(row=4, column=2) 

     self.macro_button = Button(master, text="Test Button", command=self.test) 
     self.macro_button.grid(row=11, column=1) 



    def test(self): 
     if self.check.get(): 
      print('its on') 
     else: 
      print('its off') 



root = Tk() 
root.resizable(width=False, height=False) 
my_gui = GUI(root) 
root.mainloop() 

你在網上找到的例子是寫在一個「內聯」的風格 - 這是很好的,直到你的GUI變得更大,你需要很多方法和變量使用/通過。

+0

非常感謝你的迴應,它完美的作品,很明顯,我是新來的這一切哈哈!當我不必爲輸入框中輸入的文本變量執行相同操作時,爲什麼必須將其設置爲實例變量? @ Luke.py – Ruthus99

+0

什麼是輸入框?你的意思是入口小部件?我可以看到你的代碼中的任何一個! :S已經解決了你的問題? –

+0

是的我的意思是入口小部件,我知道我把它們留在了外面,但我只是問一個普通的python問題。是的,我的問題已經解決了,謝謝@ luke.py – Ruthus99