繁体   English   中英

文件资源管理器在 Tkinter Python 程序中自动打开

[英]File explorer automatically opens in Tkinter Python program

当我运行 python 程序时,文件资源管理器会自动打开。 我希望这仅在用户按下“打开”按钮时发生。

以上已经解决。

我目前在加密或解密文本方面遇到的问题是上传文件功能有效或类型字符串功能。 两者不在同一个程序中工作。

我将不胜感激任何帮助。

from tkinter import *
from tkinter import filedialog

class Caesar(Frame):
    LETTERS = "abcdefghijklmnopqrstuvwxyz"

    def UploadAction(self):
        filename = filedialog.askopenfilename(initialdir="/",
                                          title="Open File",
                                          filetypes=(("Text Files", "*.txt"), ("All Files", "*.*")))

        with open('caesartest.txt') as f:
        contents = f.read().splitlines()
        contents = ' '.join(map(str, contents))
        return contents

    def __init__(self, pencere):
        Frame.__init__(self, pencere)
        self.pencere = pencere

        Label(pencere, text="Enter your message: ", relief=GROOVE, width=20).place(x=20, y=30)
        self.Ent1 = Entry(pencere, width=30)
        self.Ent1.place(x=230, y=30)

        Label(pencere, text="Upload a .txt file: ", relief=GROOVE, width=20).place(x=20, y=80)
        Button(pencere, text="Open", relief=GROOVE, font="bold", command=self.UploadAction).place(x=230, y=80)
        self.Ent3 = Entry(pencere, width=24)
        self.Ent3.place(x=280, y=80)
        self.Ent3.insert(100, self.UploadAction())  

        Label(pencere, text="Enter key: ", relief=GROOVE, width=20).place(x=20, y=120)
        self.Ent2 = Entry(pencere, width=30)
        self.Ent2.place(x=230, y=120)

        Button(pencere, text="Encrypt", relief=GROOVE, font="bold", command=self.Encrypt).place(x=200, y=150)
        Button(pencere, text="Decrypt", relief=GROOVE, font="bold", command=self.Decrypt).place(x=280, y=150)

        Label(pencere, text="Result: ", relief=GROOVE, width=20).place(x=20, y=203)
        self.RESULT = Entry(pencere, width=30)
        self.RESULT.place(x=230, y=200)

    def Encrypt(self):
        key = int(self.Ent2.get())
        length = len(self.LETTERS)

        translation = ''

        text = self.Ent1.get()
        text = self.Ent3.get()
        text = re.sub('[^A-Za-z]+', '', text.lower())

        for character in text:
            if character in self.LETTERS:
                sayı = self.LETTERS.find(character)
                sayı = (sayı + key) % length
                translation += self.LETTERS[sayı]
            else:
                translation += character

        self.RESULT.delete(0, END)
        self.RESULT.insert(0, translation)

    def Decrypt(self):
        key = int(self.Ent2.get())
        length = len(self.LETTERS)

        translation = ''

        text = self.RESULT.get()
        text = re.sub('[^A-Za-z]+', '', text.lower())

        for character in text:
            if character in self.LETTERS:
                sayı = self.LETTERS.find(character)
                sayı = (sayı - key) % length
                translation += self.LETTERS[sayı]
            else:
                translation += character

        self.RESULT.delete(0, END)
        self.RESULT.insert(0, translation)

if __name__ == "__main__":
    root = Tk()
    root.title("Caesar")
    root.geometry("580x280+70+70")
    Caesar(root).pack(side="top", fill="both")
    root.mainloop()

至于我的问题是因为你使用

    self.Ent3.insert(100, self.UploadAction())   

__init__因此它在开始时执行UploadAction() ,而不是在您按下按钮时。

您必须在由按钮执行的UploadAction()使用insert

def UploadAction(self):
    filename = filedialog.askopenfilename(initialdir="/",
                                      title="Open File",
                                      filetypes=(("Text Files", "*.txt"), ("All Files", "*.*")))

    if filename: 
        with open('caesartest.txt') as f:
            contents = f.read().splitlines()
            contents = ' '.join(map(str, contents))
        self.Ent3.insert(100, content) # <-- use it 

    # return contents # useless when used with `Button` 

def __init__(self, pencere):
    Frame.__init__(self, pencere)
    self.pencere = pencere

    Label(pencere, text="Enter your message: ", relief=GROOVE, width=20).place(x=20, y=30)
    self.Ent1 = Entry(pencere, width=30)
    self.Ent1.place(x=230, y=30)

    Label(pencere, text="Upload a .txt file: ", relief=GROOVE, width=20).place(x=20, y=80)
    Button(pencere, text="Open", relief=GROOVE, font="bold", command=self.UploadAction).place(x=230, y=80)
    self.Ent3 = Entry(pencere, width=24)

    self.Ent3.place(x=280, y=80) 

    # self.Ent3.insert(100, self.UploadAction()) # <-- don't do this

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM