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

标签 python tkinter

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

相关文章:

python - python 中的 next() 真的那么快吗?

python - 无法清除输出文本 : tkinter. TclError:错误的文本索引 "0"

python - 选择列表中包含的子字符串(没有语法字符)

python - 如何使用在不同项目中构建的分类模型对新文本进行分类?

python - Entry().get() 在 Python 3.4 中不起作用

python - 从 Tkinter 中的列表框中取消选择

python - 使用返回值作为变量而不调用整个函数

python - 滚动条在 python tkinter 中不起作用

python - 当点击更改密码时是空白页但密码已更改django

python - 使用正则表达式分割字符串并包含模式