Форум сайта python.su
Всем привет. В том году я уже обращался сюда за помощью в создании дизайна для своего первого проекта. Поставив и разобравшись с PyQt5, я сделал небольшой интерфейс для своей игры “Угадай число”. Сейчас вопрос в следущем: код самой игры давно готов, дизайн - успешно импортирован, но как доработать логику так, чтобы после ввода пользователем желаемого значения и нажатия кнопки ОК, выполнялись все последущие действия: сравнение больше-меньше и последущий его текстовый вывод в спец.поле и в конце - в том же поле и случайно сгенерированный ответ-результат (random.choice)?
Подробнее об используемых виджетах:
MainWindow - главное окно программы с его иконкой Icon.ico
QLineEdit (TextLine) - небольшое поле для ввода предполагаемых пользователем вариантов
QTextBrowser (Pole) - поле для вывода результатов сравнения значений и конечного ответа-результата
QPushButton (btn_OK) - кнопка ОК, и так понятно))
QLabel - надпись в главном окне “Введите число от 1 до 100:”
Вот так - это выглядит на деле:
А вот - сам код игры:
answers = ["Верно", "Правильно", "Молодец!"] #Ответы. В будущем будут изменены import random import sys from PyQt5 import QtWidgets import design class ExampleApp (QtWidgets.QMainWindow, design.Ui_MainWindow): def __init__ (self): super().__init__() self.setupUi (self) def main(): app = QtWidgets.QApplication (sys.argv) window = ExampleApp() window.show() app.exec_() if __name__ == '__main__': main() num = random.randint (1, 100) while True: #Создание цикла самой игры print ('Введите число от 1 до 100') guess = input() i = int (guess) if i == num: print (random.choice (answers)) #Вывод случайно выбранного ответа break elif i < num: print ('Загаданное число больше') elif i > num: print ('Загаданное число меньше') text_field = QtWidgets.TextLine btn = QtWidgets.btn_OK text_out = QWidgets.Pole
Офлайн
Логично было бы сделать обработку введенного значения (больше-меньше) как функцию и впихнуть в класс. Привязать эту функцию к кнопке ОК (вызов функции при нажатии кнопки). Функция должна взять введенное значение из TextLine и сравнивать полученное число. Было бы замечательно, если сделать вывод в Pole что-то типа “Ваше число”, далее значение и “Загаданное число …”. Вывод в Pole делается как изменение значения этого виджета. Вывод в Pole вставить вместо имеющегося print в Вашем коде.
К сожалению, с qt не работал и более конкретный совет дать не могу. Рекомендую посмотреть доки на предмет привязки команд к кнопкам, на получение значений из QLineEdit и обновление значений в QTextBrowser.
Офлайн
Офлайн
Rafikэто нужно сделать спомощью def, я правильно понимаю?
Логично было бы сделать обработку введенного значения (больше-меньше) как функцию и впихнуть в класс.
Офлайн
GameStarв классе:
это нужно сделать спомощью def, я правильно понимаю?
Class.... def __init__ (self): .... self.btn_OK.clicked.connect(self.ok_press) .... def ok_press(self): guess = TextLine.text() #ну и дальше почти тоже самое только вместо print(any_text) использовать Pole.append(any_text)
[code python][/code]
Отредактировано PEHDOM (Янв. 16, 2019 12:36:15)
Офлайн
GameStarПравильно, нужно сделать функцию и назначить её кнопке.
это нужно сделать с помощью def, я правильно понимаю?
Офлайн
ramiда, это я уже понял…))
1. если вы создаёте интерфейс в Дизайнере, то не нужно его конвертировать, лучше использовать в формате .ui, в этом случае его можно изменять в Дизайнере (а изменять его прийдётся много раз).
ramiхммм… даже не знаю, нужно ли это в таком маленьком проекте…
2. нужно добавить ещё кнопку “Новая игра” и возможно кнопку “Закрыть”.
ramiда, будет здорово. Заранее благодарен)
Если хотите могу выложить свой вариант.
Отредактировано GameStar (Янв. 16, 2019 14:29:45)
Прикреплённый файлы:
Guess-numbers.py (1,1 KБ)
Офлайн
Попробую еще приложить дизайн:
Прикреплённый файлы:
design.ui (2,9 KБ)
Офлайн
В архиве папка с файлами, файлы должны лежать в одной папке.
Прикреплённый файлы:
Угадай число.zip (1,9 KБ)
Офлайн
rami
спасибо огромное за помощь! сам бы я так не смог, конечно…). Теперь меня интересует только одно: как его скомпилировать из py в exe, чтобы можно было делиться с друзьями, например? у меня есть pyinstaller, я пишу в командной строке pyinstaller –onefile –noconsole (эти параметры я указываю в начале, сразу после слова “pyinstaller”, либо -F -w в конце и потом директорию и имя файла с расширением. Он компилирует, получается несколько папок, в папке dist лежит этот готовый файл, но после запуска ничего не происходит: комп долго думает, что-то как будто грузит и хоть бы что. Либо, если еще немного подождать - то выйдет ошибка что-то вроде “Failed to execu…” (не помню дальше текст). Как вообще компилить в exe, и желательно чтобы у файла была такая же иконка, как у окна?
И можно ли как-то сделать, чтобы размер файла был не очень большой? я до этого скомпилировал, и он получился не рабочий = 92 мб. А если рабочий? - за 100 мб перевалит?)) не многовато ли для такой простенькой игры?) нет, я конечно знаю, что PyQt5-проекты много весят, но не так же… О_о
Отредактировано GameStar (Янв. 16, 2019 16:42:07)
Офлайн