@Simple_Ian

Имеется шаблон GUI для генерации паролей с возможностью выбора длины и количества паролей. Как связать функцию генерации с виджетами?

from kivy.app import App
from kivy.uix.textinput import TextInput
from kivy.uix.gridlayout import GridLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.config import Config
import random

Config.set('graphics', 'resizable', '1')
Config.set('graphics', 'width', '350')
Config.set('graphics', 'height', '150')

passnumber = input(int(""))
passlength = input(int(""))
chars = '+-/*!&$#?=@<>%^:;""_~()abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'

class PassGenApp(App):

    def generate(self):
        global passnumber
        global passlength

        for n in range(passnumber):
            password = ''
            for i in range(passlength):
                password += random.choice(chars)
            print(password)

    def build(self, **kwargs):

        bl = BoxLayout(orientation='vertical')
        gl = GridLayout(cols=2)

        bl.add_widget(Label(text=''))

        gl.add_widget(Label(text='PassNum:'))
        gl.add_widget(TextInput())
        gl.add_widget(Label(text='PassLength:'))
        gl.add_widget(TextInput())
        gl.add_widget(Button(text='Generate'))

        gl.add_widget(bl)
        return gl

if __name__ =='__main__':
    PassGenApp().run()
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ответы на вопрос 1
Ternick
@Ternick
Я конечно никогда не использовал kivy, но вопрос достаточно лёгкий)
Но, могу предложить вам изменить код как-нибудь так:
КОД

from kivy.app import App
from kivy.uix.textinput import TextInput
from kivy.uix.gridlayout import GridLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.config import Config
from random import choice

Config.set('graphics', 'resizable', '1')
Config.set('graphics', 'width', '350')
Config.set('graphics', 'height', '150')

class PassGenApp(App):
	txt1 = TextInput()
	txt2 = TextInput()
	chars = '+-/*!&$#?=@<>%^:;""_~()abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'

	def generate(self):
		print(["".join([choice(self.chars) for i in range(int(self.txt2.text))]) for passcount in range(int(self.txt1.text))])

	def build(self, **kwargs):

		bl = BoxLayout(orientation='vertical')
		gl = GridLayout(cols=2)

		bl.add_widget(Label(text=''))

		gl.add_widget(Label(text='PassNum:'))
		gl.add_widget(self.txt1)
		gl.add_widget(Label(text='PassLength:'))
		gl.add_widget(self.txt2)
		gl.add_widget(Button(text='Generate'))

		gl.add_widget(bl)
		return gl

if __name__ =='__main__':
	PassGenApp().run()


Думаю как-то так это должно быть, хоть это и не идеальный вариант и со стороны правильности написания кода, лучше закрыть глаза и не смотреть, но думаю он будет работать.
Если ответ устраивает, отметьте ответ решением.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы