2016-11-04 108 views
-1

當我運行這段代碼在Python 3.5:按鈕沒有定義,蟒蛇3

import tkinter 

top = tkinter.Tk() 

def callback(): 
    print ("click!") 

button = Button(top, text="OK", command=callback) 
top.mainloop() 

我得到一個錯誤:

NameError: name 'Button' is not defined 
+0

你已經寫了'頂= tkinter.Tk()',而不是'頂部= TK( )'。這真的很明顯,爲什麼'button = Button(top,text =「OK」,command = callback)'不起作用。我建議你猜,但已經有足夠的答案 – Aemyl

回答

0

導入Tkinter的模塊只允許您訪問的模塊對象(tkinter)。您可以通過編寫任何課程來訪問其中的任何課程。 tkinter.Button而不是僅僅Button

import tkinter 

top = tkinter.Tk() 

def callback(): 
    print ("click!") 

button = tkinter.Button(top, text="OK", command=callback) 
top.mainloop() 

也可以專門導入從模塊需要的類:

import tkinter 
from tkinter import Button 

top = tkinter.Tk() 

def callback(): 
    print ("click!") 

button = Button(top, text="OK", command=callback) 
top.mainloop() 
+0

我沒有得到錯誤,當我嘗試這個,但按鈕不顯示在窗口上... – Binyamin

+0

檢查,例如, http://effbot.org/tkinterbook/tkinter-hello-tkinter.htm。將他們的第一個示例與您自己的示例進行比較,查看程序中缺少的內容。 – freidrichen

0

至於說,「按鈕」沒有定義

你應該嘗試:

import tkinter 

top = tkinter.Tk() 

def callback(): 
    print ("click!") 

button = tkinter.Button(top, text="OK", command=callback) 
top.mainloop() 
0

或者@freidrichen resp ONSE您可以使用(不推薦)

from tkinter import * 

import tkinter as tk 

然後

tk.Button(top, text="OK", command=callback) 
+0

表示不推薦。 – scotty3785

+0

FWIW,因爲後者將大約130個Tkinter名稱轉儲到您的全局名稱空間中,所以'tkinter import tk'比'tkinter import *'更好。這很麻煩,因爲它可能導致名稱衝突,特別是如果您使用「星形」導入導入另一個模塊的內容(並且它可能會減慢已經很慢的全局名稱查找過程)。 –

+0

同意。鑑於大多數tkinter教程和示例都使用'from tkinter import *',所以新手很難理解這一點。 – scotty3785