簡體   English   中英

顯示文件名,而不顯示文本小部件中的內容tkinter Python

[英]displaying file name, not content in text widget tkinter Python

我不知道為什么我還沒有找到解決這個問題的好方法,這對我來說似乎很基礎..盡管還不夠基礎,無法令人滿意地解決它。 我正在閱讀的一本密碼學書籍中的一個章節項目指示我用您喜歡的語言編寫一個簡單的單字母密碼。我選擇了Python。

它從一個簡單的tkinter應用程序開始。 還有一些小部件,哈哈... duh。 無論如何,這里是相關的代碼:

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()

除了創建窗口小部件之外,實際上幾乎沒有任何其他功能,我決定將其全部發布,因為還沒有涉及到它,因此有人可以很好地了解Im的位置。

我尚未解決的問題是,當我按下“瀏覽”按鈕選擇要加密的文件然后選擇文件時,文件內容顯示在“ file_name”文本小部件中,而不是文件名本身。

我以為我必須將“文件名”變量更改為不是實際的文件名,而是文件,然后從“文件名”變量中的打開文件對話框中加載“文件名”字段的內容。 我只是還無法弄清楚該怎么做。 我也沒有遇到合適的方法來做到這一點。 有指導嗎?

謝謝F

顯示文件名

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())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM