【问题标题】:displaying file name, not content in text widget tkinter Python显示文件名,而不是文本小部件 tkinter Python 中的内容
【发布时间】:2012-02-22 04:28:32
【问题描述】:

我不知道为什么我还没有找到解决这个问题的好方法,这对我来说似乎很初级......虽然还不够初级,无法令人满意地解决它。 我正在阅读的密码学书籍中的一个章节项目指示用您喜欢的语言编写一个简单的单字母密码......我选择了 Python。

它从一个简单的 tkinter 应用程序开始。有一些小部件,大声笑......呃。无论如何,这是相关代码:

from tkinter import *
from tkinter.filedialog import askopenfilename
from tkinter.messagebox import showerror


class Application(Frame):
    def __init__(self, master):
        """ Initialize Frame. """
        super(Application, self).__init__(master)
        self.grid()
        self.create_widgets()

    def create_widgets(self):
        """ Set all program widgets. """
        # set all labels
        Label(self, text = "Plaintext File: ")\
            .grid(row=0, column=0, sticky=W)
        Label(self, text = "Ciphertext: ")\
            .grid(row=3, column=0, sticky=W)
        Label(self, text = "Offset: ")\
            .grid(row=2, column=0, sticky=W)

    # set buttons
    Button(self, text = "Browse", command=self.load_file, width=10)\
        .grid(row=1, column=0, sticky=W)

    # set entry field
    self.file_name = Text(self, width=39, height=1, wrap=WORD)
    self.file_name.grid(row=1, column=1, columnspan=4, sticky=W)

    # set display field
    self.output_display = Text(self, width=50, height=5, wrap=WORD)
    self.output_display.grid(row=4, column=0, columnspan=4, sticky=W)

    # set offset amount spinbox
    self.offset_amt = IntVar()

    self.offset_amt = Spinbox(self, from_=1, to=13)
    self.offset_amt.grid(row=2, column=1, sticky=W)

    # set shift direction
    self.shift_dir = StringVar()
    self.shift_dir.set('r')

    Radiobutton(self, text="Shift Right", variable=self.shift_dir, value='r')\
        .grid(row=2, column=2, sticky=W)
    Radiobutton(self, text="Shift Left", variable=self.shift_dir, value='l')\
        .grid(row=2, column=3, sticky=W)


def load_file(self):

    self.filename = askopenfilename(initialdir='~')


    if self.filename: 
        try: 
            #self.settings.set(self.filename)
            self.file_name.delete(0.0, END)
            self.file_name.insert(0.0, open(self.filename, 'r'))
        except IOError: 
            showerror("Open Source File", "Failed to read file \n'%s'"%self.filename)
            return


def main():
    root = Tk()
    root.title("simple mono-alpha encrypter")
    root.geometry('450x250')
    app = Application(root)

for child in app.winfo_children(): 
    child.grid_configure(padx=3, pady=3)

root.mainloop()

main()

现在除了创建小部件之外,实际上只有很少一部分实际上可以做任何事情,我决定将其全部发布,因为它还没有涉及到,有人可以很好地了解我在哪里。

我没有解决的问题是,当我按下使用“浏览”按钮选择要加密的文件然后选择文件时,文件内容显示在“文件名”文本小部件中,而不是文件名本身。

我认为我必须将“文件名”变量更改为不是实际文件名而是文件,然后从“文件名”变量中的打开文件对话框中加载文件名字段的内容。我只是还没有弄清楚如何做到这一点。 我也没有找到合适的方法来做到这一点。 有什么指导吗??

谢谢 F

【问题讨论】:

    标签: python encryption python-3.x tkinter


    【解决方案1】:

    显示文件名

    self.file_name.insert(0.0, self.filename)
    

    显示文件内容

    您只需要从文件中读取数据。见http://docs.python.org/library/stdtypes.html#file-objects

    with open(self.filename, 'r') as inp_file:
        self.file_name.insert(0.0, inp_file.read())
    

    【讨论】:

    • 谢谢,我已经阅读了您发布的链接中的信息,但我感谢您为我花费的时间。我在 Python 中处理文件的主要经验来自于文本方式(不是 GUI),所以我试图将其翻译过来,但没有准确理解。作为 Python 的新手,我忘记/忽略了“with”命令。再次感谢您为我所用的时间。
    • with 语句只负责关闭文件。第二段代码最重要的区别是.read(),它实际上读取了数据。很高兴能提供帮助。
    • 冒着听起来很菜鸟的风险(我有点:))“with语句只负责关闭文件”到底是什么意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多