В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Внутри 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()
Кстати: у каждого виджета должен быть родитель, поэтому я добавляю master
в Frame()
. Возможно, здесь нет никакой разницы, но если у вас будет много фреймов или виджетов, тогда виджет без родителя может отображаться в неожиданном месте.
pack()
и place()
и grid()
не следует смешивать в одном окне или кадре, потому что pack()
и grid()
пытаются динамически рассчитать позицию, и другой менеджер слоев может создать проблему с этим. Но с помощью pack/grid/place
вы можете поместить frame
, а внутри этого frame
вы можете использовать другой менеджер слоев (pack/grid/place
).