如果我没有使用正确的术语,我深表歉意,我是 Python 的新手并且一直在悠闲地做这个是为了好玩。我试图通过观看一些教程和在线阅读来自己弄清楚一切。我遇到的问题是我想为 python 密码生成器制作一个 GUI(非常简单的第一个项目。)我已经创建了我认为正确的格式,但是我在显示的函数中遇到了问题GUI 窗口而不是终端。我认为是当我来到 self.output 时,它把一切都搞砸了。
class GenPass:
def __init__(self, master):
frame = Frame()
frame.pack()
self.printButton = Button(frame, text="Generate Password", padx=4, pady=4, command=self.generate)
self.printButton.pack(side=LEFT)
self.quitButton = Button(frame, text="Copy to Clipboard", padx=4, pady=4, command=master.destroy)
self.quitButton.pack(side=LEFT)
self.output = Label(frame, fg="Green")
self.output.place(x=240, y=85)
self.output.config(text=self.generate)
def generate(self):
for i in range(3):
print(random.choice(Words).capitalize(), end='')
for i in range(2):
print(random.choice(Numbers), end='')
for i in range(1):
print(random.choice(Spec_Char))
我希望结果出现在 GUI 窗口中,那里会有生成的密码。它出现在终端中,但不出现在窗口中。当它通过调整 output.pack() 出现时,它只列出随机数和函数名称(例如 9012381generate)
最佳答案
在 generate
中,您应该使用密码创建字符串并使用 self.output.config(text=password)
而不是 print()
。
我更改了代码,因为它对我不起作用。现在每个人都可以复制代码并运行它。
from tkinter import *
import random
import string
words = string.ascii_uppercase
numbers = string.digits
spec_char = '!@#$%'
class GenPass:
def __init__(self, master):
frame = Frame(master) # add parent for Frame
frame.pack()
self.printButton = Button(frame, text="Generate Password", padx=4, pady=4, command=self.generate)
self.printButton.pack(side=LEFT)
self.quitButton = Button(frame, text="Copy to Clipboard", padx=4, pady=4, command=master.destroy)
self.quitButton.pack(side=LEFT)
self.output = Label(master, fg="Green")
self.output.pack()
self.generate() # genrate password at start
def generate(self):
password = ''
for i in range(3):
password += random.choice(words)
for i in range(2):
password += random.choice(numbers)
for i in range(1):
password += random.choice(spec_char)
self.output.config(text=password)
root = Tk()
GenPass(root)
root.mainloop()
顺便说一句:每个小部件都应该有父级,所以我在 Frame()
中添加了 master
。也许这在这里没有什么区别,但是如果您有很多框架或小部件,那么没有父级的小部件可能会显示在意想不到的地方。
pack()
和 place()
和 grid()
不应在一个窗口或框架中混合,因为 pack ()
和 grid()
尝试动态计算位置,而其他布局管理器可能会对此产生问题。但是使用 pack/grid/place
你可以放置 frame
并且在这个 frame
里面你可以使用不同的布局管理器(pack/grid/地点
).
关于python - 类函数的文本输出? -Tkinter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55526236/