Tkinter Python GUI问题

时间:2015-12-16 12:28:41

标签: python user-interface input tkinter text-files

以下是我的代码,它运行但我不确定如何获取"运行文本"按钮提示我在新窗口中打开文本文件,当前出现一个新窗口,其中显示"退出"按钮,没别的。

dropna

我确定我的代码非常混乱,因为我只是初学者,可能不需要某些部分,我们将非常感谢任何建议。

2 个答案:

答案 0 :(得分:2)

我已经简化了你的代码,但我也对它进行了一些改进。我使用askopenfilename而不是askopenfile,因此我们可以获取文件名并将其显示在包含文本小部件的每个Toplevel窗口的标题栏中。

import tkFileDialog
import Tkinter as tk

class HomeScreen:
    def __init__(self, master):
        self.master = master
        frame = tk.Frame(master)
        frame.pack()
        button = tk.Button(frame, text='Show Text', width=25, command=self.open_file)
        button.pack()
        button = tk.Button(frame, text='Quit', width=25, command=master.destroy)
        button.pack()
        master.mainloop()

    def open_file(self):
        filename = tkFileDialog.askopenfilename()
        if not filename:
            #User cancelled
            return
        with open(filename) as f:
            filedata = f.read()

        window = tk.Toplevel(self.master)
        window.title(filename)
        text = tk.Text(window, height=10, width=100)
        text.pack()
        text.insert(1.0, filedata)


def main():
    root = tk.Tk()
    HomeScreen(root)

if __name__ == '__main__':
    main()

要一次显示一个单词的文本文件,您可以使用下面的版本替换open_file方法。您还需要添加show_word方法。我并不是说这是达到这种效果的最好方法,但至少它有效。 :)

def show_word(self, word):
    self.text.delete(1.0, tk.END)
    self.text.insert(tk.END, word)

def open_file(self):
    filename = tkFileDialog.askopenfilename()
    if not filename:
        #User cancelled
        return
    with open(filename) as f:
        filedata = f.read()

    words = filedata.split()

    window = tk.Toplevel(self.master)
    window.title(filename)
    self.text = text = tk.Text(window, height=10, width=100)
    text.pack()

    delta = 1000    #in millseconds
    delay = 0
    for word in words:
        window.after(delay, lambda word=word: self.show_word(word))
        #print word
        delay += delta

答案 1 :(得分:1)

如果您希望"Run text"打开一个名为method的文件对话框更改:

self.button1 = tk.Button(self.frame, text = 'Run Text', width = 25, command = self.openFile)