我是新來的Tkinter,我試圖添加事件處理GUI。 我有一個包含句子和單詞的列表(該列表包含一個由發送的字符串作爲其第一個元素和它的單詞列表作爲其第二個元素的子列表),我首先想要使用標籤顯示句子小部件。我想要做的是使用向上和向下鍵在句子之間切換。tkinter綁定不會做任何事情和屬性錯誤
然而,我的第一個問題是另一個問題。我想將當前顯示的句子存儲在名爲current_sent的變量中,因此我嘗試在應用程序的構造函數中將0賦給self.current_sent。但是,當我嘗試在代碼中引用此變量時,出現屬性錯誤。當我在應用程序的initialize()方法中初始化self.current_sent時,我沒有收到錯誤。有人可以告訴我爲什麼這是嗎?
現在,如果我在初始化方法中設置self.current_sent = 0,那麼gui會啓動,但在按下向下按鈕時不會發生任何更改。 我也試過這個只使用''作爲事件,但是這也不會導致顯示第二個句子。 如果我嘗試從next_sent方法調用打印語句,則不顯示任何內容,所以我從不輸入事件處理函數。 有人可以告訴我,我做錯了嗎?
import nltk
import Tkinter as tk
import os
class Annotator(tk.Tk):
def __init__(self, parent):
tk.Tk.__init__(self, parent)
self.sents = self.get_sents()
self.initialize()
self.current_sent = 0
self.current_word = 0
def sent_tokenize(self, textfile):
f = open(textfile)
s = f.readlines()
text = " ".join(s)
sents = nltk.sent_tokenize(text)
tags = [[x,nltk.word_tokenize(x)] for x in sents]
return tags
def get_sents(self):
article_files = self.get_articles()
list_of_sents = [self.sent_tokenize(x) for x in article_files]
sents = [sent for sublist in list_of_sents for sent in sublist]
return sents
def get_articles(self):
directory = "/Users/------------/Documents/reuters/reuters/articles"
list_of_articles = []
for f in os.listdir(directory):
if not f.startswith('.'):
filename = directory + "/" + f
list_of_articles.append(filename)
return list_of_articles
def next_sent(self,event):
if (self.current_sent < len(self.sents) - 1):
self.current_sent += 1
self.label.config(text = self.sents[self.current_sent][0])
def initialize(self):
self.label = tk.Label(text = self.sents[self.current_sent][0])
self.label.bind('<KeyPress-Down>', self.next_sent)
self.label.grid(row = 0, column = 0, columnspan = 2)
if __name__ == "__main__":
app = Annotator(None)
app.mainloop()
'Tk'是根窗口,它不需要父親btw,查看'help(tk.Tk .__ init __)'獲取信息。 –