отображение имени файла, а не содержимого в текстовом виджете tkinter Python - PullRequest
2 голосов
/ 22 февраля 2012

Я понятия не имею, почему мне пока не удалось найти хорошее решение этой проблемы, мне это кажется очень элементарным ... хотя и не настолько элементарным, чтобы удовлетворительно понять его.Проект главы в книге по криптологии, которую я читаю, дает указание написать простой моно-алфавитный шифр на предпочитаемом вами языке ... Я выбрал 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()

На самом деле очень мало того, что действительно делает что-то, кроме создания виджетов прямо сейчас, я решил опубликовать все это, так как это еще не связано, и кто-то может получить хорошийИдея, где я нахожусь.

Моя проблема, которую я не решил, состоит в том, что когда я нажимаю кнопку «Обзор», чтобы выбрать файл для шифрования, а затем выберите файл, содержимое файла отображается вТекстовый виджет 'file_name', а не само имя файла.

Я думаю, что мне нужно изменить переменную 'filename' на не фактическое имя файла, а файл вместо этого, а затем загрузить содержимое поля File Name из диалогового окна open file в переменную 'filename',Я просто еще не смог понять, как это сделать.Я также не сталкивался с подходящим способом сделать это.Любое руководство ??

Спасибо F

1 Ответ

5 голосов
/ 22 февраля 2012

Отображение имени файла

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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...