Генератор случайных чисел на Pysimplegui
пытаюсь сделать генератор случайных числел, но столкнулся с некоторыми проблемами. В общем я хочу вывести список чисел через функцию Gen(), но она работает не правильно, числа выводятся в терминал, а не в саму программу. Помогите пожалуйста
p.s с pysimplegui работаю недавно
import PySimpleGUI as sg
from random import *
def Gen():
pass
sg.theme('SystemDefault')
layout = [
[sg.Text('Number of digits'), sg.Input(key = 'ND')],
[sg.Text('Minimum'), sg.Input(key = 'Min')],
[sg.Text('Maximum'), sg.Input(key = 'Max')],
[sg.Text(' ', key = 'OUT')],
[sg.Button('Generate'), sg.Button('Clear')]
]
window = sg.Window('Generator', layout)
event,values = window.read()
def Gen():
for i in range(1,int(values['ND'])):
print(randint(int(values['Min']),int(values['Max'])), end = ' ')
while True:
event,values = window.read();
if event is None or event == sg.WIN_CLOSED:
break
if event == 'Generate':
window['OUT'].update(Gen())
if event == 'Clear':
window.FindElement('ND').Update('')
window.FindElement('Min').Update('')
window.FindElement('Max').Update('')
window.FindElement('OUT').Update('')
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Замечания и рекомендации:
- Функция
Genне работала, т.к. по задумке она должна была возвращать значение, т.к.window['OUT'].update(Gen()) - Код выполнялся только со второго раза, т.к. вне цикла вызывалось
event,values = window.read() - Функции в питоне пишите с маленькой буквы
- Добавил значения по-умолчанию в поля
- Лучше избегайте глобальных переменных, у вас это была
valuesвGen - Функцию генерации сделал самодостаточной
- Подправил импорты, т.к. рекомендуется такой порядок импортирования: системные библиотеки, внешние/установленные и собственные
from random import randint
import PySimpleGUI as sg
sg.theme('SystemDefault')
layout = [
[sg.Text('Number of digits'), sg.Input(default_text='5', key='ND')],
[sg.Text('Minimum'), sg.Input(default_text='1', key='Min')],
[sg.Text('Maximum'), sg.Input(default_text='9', key='Max')],
[sg.Text(' ', key='OUT')],
[sg.Button('Generate'), sg.Button('Clear')]
]
window = sg.Window('Generator', layout)
def generate(number: int, min_number: int, max_number: int) -> str:
return ''.join(str(randint(min_number, max_number)) for _ in range(number))
while True:
event, values = window.read()
if event is None or event == sg.WIN_CLOSED:
break
if event == 'Generate':
number, min_number, max_number = int(values['ND']), int(values['Min']), int(values['Max'])
text = generate(number, min_number, max_number)
print(text)
window['OUT'].update(f'Result: {text}')
if event == 'Clear':
window.find_element('ND').update('')
window.find_element('Min').update('')
window.find_element('Max').update('')
window.find_element('OUT').update('')
Результат:
