gpt4 book ai didi

python - 类函数的文本输出? -Tkinter

转载 作者:太空宇宙 更新时间:2023-11-04 04:15:29 25 4
gpt4 key购买 nike

如果我没有使用正确的术语,我深表歉意,我是 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()

enter image description here

顺便说一句:每个小部件都应该有父级,所以我在 Frame() 中添加了 master。也许这在这里没有什么区别,但是如果您有很多框架或小部件,那么没有父级的小部件可能会显示在意想不到的地方。

pack()place()grid() 不应在一个窗口或框架中混合,因为 pack ()grid() 尝试动态计算位置,而其他布局管理器可能会对此产生问题。但是使用 pack/grid/place 你可以放置 frame 并且在这个 frame 里面你可以使用不同的布局管理器(pack/grid/地点).

关于python - 类函数的文本输出? -Tkinter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55526236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com