Вывод текста из функции класса? - Ткинтер

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

2
задан gmds 4 April 2019 в 23:23
поделиться

1 ответ

Внутри 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

Кстати: у каждого виджета должен быть родитель, поэтому я добавляю master в Frame(). Возможно, здесь нет никакой разницы, но если у вас будет много фреймов или виджетов, тогда виджет без родителя может отображаться в неожиданном месте.

pack() и place() и grid() не следует смешивать в одном окне или кадре, потому что pack() и grid() пытаются динамически рассчитать позицию, и другой менеджер слоев может создать проблему с этим. Но с помощью pack/grid/place вы можете поместить frame, а внутри этого frame вы можете использовать другой менеджер слоев (pack/grid/place).

0
ответ дан furas 4 April 2019 в 23:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: