2014-04-21 187 views
3

我發現這個關於滾動條的代碼工作正常。NameError:未定義全局名稱'END'

from tkinter import * 

master = Tk() 

scrollbar = Scrollbar(master) 
scrollbar.pack(side=RIGHT, fill=Y) 

listbox = Listbox(master, yscrollcommand=scrollbar.set) 
for i in range(10000): 
    listbox.insert(END, str(i)) 
listbox.pack(side=LEFT, fill=BOTH) 

scrollbar.config(command=listbox.yview) 

mainloop() 

我嘗試使用它在我的代碼是這樣的:

import tkinter as tk 

class interface(tk.Frame): 
    def __init__(self,den): 
     self.tklist() 
     #in my code, tklist is not called here. I called it here to minimize the code 
     #there are stuff in here also 

    def tklist(self): 
     scrollbar = tk.Scrollbar(den) 
     self.lst1 = tk.Listbox(den, selectmode="SINGLE", width="100", yscrollcommand=scrollbar.set) 
     for i in range(1000): 
      self.lst1.insert(END, str(i)) 
     self.lst1.pack(side=LEFT, fill=BOTH) 
     scrollbar.config(command=lst1.yview) 

den = tk.Tk() 
den.title("Search") 

inter = interface(den) 

den.mainloop() 

但是,當我跑上面的代碼中,我得到了插入線的錯誤。

NameError: global name 'END' is not defined 

順便說一句,我試圖找到文檔和a link from effbot是我得到的最接近但仍弄不明白什麼是錯的。

回答

7

END,LEFTBOTH全部位於tkinter命名空間中。因此,他們需要得到他們之前放置tk.資格:

for i in range(1000): 
    self.lst1.insert(tk.END, str(i)) 
self.lst1.pack(side=tk.LEFT, fill=tk.BOTH) 
scrollbar.config(command=lst1.yview) 

或者,你可以導入它們明確,如果你想:

from tkinter import BOTH, END, LEFT 
+2

另一種選擇是簡單地使用文字字符串'「結束「',''」左「或」兩個「。我從來沒有完全理解爲什麼tkinter爲這些字符串做了保存。 –

+0

@iCodez nvm,看到了問題的其餘部分。有時我只是不讀...... :) – thecoder16

相關問題