【问题标题】:Tkinter Python GUI IssuesTkinter Python GUI 问题
【发布时间】:2015-12-16 12:28:41
【问题描述】:

下面是我的代码,它可以运行,但我不知道如何让“运行文本”按钮提示我在新窗口中打开文本文件,目前出现一个带有“退出”按钮的新窗口,没有别的.

import tkFileDialog
import Tkinter as tk
from Tkinter import *
import logging

 logging.basicConfig(filename= "log_file.txt", filemode = "w", level=logging.DEBUG, format='%(asctime)s %(message)s', datefmt='%d/%m/%Y %I:%M:%S %p')

logging.warning('is when this event was logged.')

class HomeScreen:
def __init__(self, master):
    self.master = master
    self.frame = tk.Frame(self.master)
    self.button1 = tk.Button(self.frame, text = 'Run Text', width = 25, command = self.new_window)
    self.button1.pack()
    self.frame.pack()

def openFile(self):
    openfile = tkFileDialog.askopenfile().read()
    text= open(openfile, 'r').read()
    T.insert(1.0, openfile)
    T = Text(height=10, width=100)
    T.pack()
    T.insert(END, "Select file to input")
    B = Button(root, text="Open", command=openFile)
    B.pack()
    mainloop()
    return

def new_window(self):
    self.newWindow = tk.Toplevel(self.master)
    self.app = Quit(self.newWindow)

class Quit:
def __init__(self, master):
    self.master = master
    self.frame = tk.Frame(self.master)
    self.quitButton = tk.Button(self.frame, text = 'Quit', width = 25, command = self.close_windows)
    self.quitButton.pack()
    self.frame.pack()
def close_windows(self):
    self.master.destroy()

def main(): 
root = tk.Tk()
app = HomeScreen(root)
app = Quit(root)
root.mainloop()

if __name__ == '__main__':
main()

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

【问题讨论】:

  • 你的意图不正确
  • 在创建newWindow 之前在new_window() 中使用self.openFile() 或将self.openFile() 移动到Quit 类并在Quit.__init__ 中使用它,如果您在Quit 窗口中需要此文本文件.
  • 顺便说一句:程序只需要一个mainloop

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


【解决方案1】:

我对您的代码进行了一些简化,但我也对其进行了一些增强。我使用askopenfilename 而不是askopenfile,因此我们可以获取文件名并将其显示在每个包含Text 小部件的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

【讨论】:

  • 谢谢,这让我更了解它!关于从我一直在玩的文本文件中输入文本,因为我希望它一次出现一个单词然后消失,我一直在使用:text_file = open ("input_text.txt", "r") for word in text_file.read().split(" "): print(word) text_file.close() 是他们将其整合到文件打开中的一种方式吗?
  • 好的。这确实应该是一个新问题,但我会在现有答案中添加更多代码。顺便说一句,如果我的回答对您有所帮助。请考虑accepting它。
【解决方案2】:

如果你想要 "Run text" 打开一个名为方法的文件对话框更改:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 2016-12-04
    • 1970-01-01
    相关资源
    最近更新 更多