python - 文件资源管理器在 Tkinter Python 程序中自动打开
问题描述
当我运行我的 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()
在开始时执行,而不是在您按下按钮时执行。
您必须使用由按钮执行的insert
内部。UploadAction()
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
推荐阅读
- java - 在 spring-boot 2 中使用 gson 时返回 null
- python - 为什么控制台中什么都没有?我正在尝试学习文本文件
- go - go 如何成功获取链接断开的包?
- ruby - 为什么 `next` 没有列为 `Enumerator` 类的方法?
- python - 简单的二十一点游戏:套牌列表变为 NoneType
- android-studio - 我怎么不能在 Android Studio 上创建 Fragments 和 Activity?错误找不到
- time - 日期 - 小时计算之间的 Google 电子表格时间
- javascript - Flutter Web:如何使用 dart js 运行 javascript
- google-colaboratory - 如何使用 google colab 从机器访问数据
- typescript - 根据成员的属性提取联合成员