Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 15, 2019 22:23:35

GameStar
От: Новокузнецк
Зарегистрирован: 2014-12-04
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите в доработке игры

Всем привет. В том году я уже обращался сюда за помощью в создании дизайна для своего первого проекта. Поставив и разобравшись с 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

Помогите пожалуйста, уже хз сколько мучаюсь с ней, и никак не могу доделать…((

Офлайн

#2 Янв. 16, 2019 06:28:08

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Помогите в доработке игры

Логично было бы сделать обработку введенного значения (больше-меньше) как функцию и впихнуть в класс. Привязать эту функцию к кнопке ОК (вызов функции при нажатии кнопки). Функция должна взять введенное значение из TextLine и сравнивать полученное число. Было бы замечательно, если сделать вывод в Pole что-то типа “Ваше число”, далее значение и “Загаданное число …”. Вывод в Pole делается как изменение значения этого виджета. Вывод в Pole вставить вместо имеющегося print в Вашем коде.
К сожалению, с qt не работал и более конкретный совет дать не могу. Рекомендую посмотреть доки на предмет привязки команд к кнопкам, на получение значений из QLineEdit и обновление значений в QTextBrowser.

Офлайн

#3 Янв. 16, 2019 08:58:53

uf4JaiD5
Зарегистрирован: 2018-12-28
Сообщения: 76
Репутация: +  4  -
Профиль   Отправить e-mail  

Помогите в доработке игры

Офлайн

#4 Янв. 16, 2019 11:51:41

GameStar
От: Новокузнецк
Зарегистрирован: 2014-12-04
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите в доработке игры

Rafik
Логично было бы сделать обработку введенного значения (больше-меньше) как функцию и впихнуть в класс.
это нужно сделать спомощью def, я правильно понимаю?

Офлайн

#5 Янв. 16, 2019 12:26:53

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Помогите в доработке игры

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)
ps я бы заменил QLineEdit на QSpinBox, тогда не нужно будет заморачиваться с проверкой на вхождение числа в диапазон, его целочисленность, и вообще проверкой а число ли это. Это будет делать сам спинбокс(если его настроить).



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Янв. 16, 2019 12:36:15)

Офлайн

#6 Янв. 16, 2019 12:37:19

rami
Зарегистрирован: 2018-01-08
Сообщения: 280
Репутация: +  71  -
Профиль   Отправить e-mail  

Помогите в доработке игры

GameStar
это нужно сделать с помощью def, я правильно понимаю?
Правильно, нужно сделать функцию и назначить её кнопке.

Замечания к коду:
1. если вы создаёте интерфейс в Дизайнере, то не нужно его конвертировать, лучше использовать в формате .ui, в этом случае его можно изменять в Дизайнере (а изменять его прийдётся много раз).
2. нужно добавить ещё кнопку “Новая игра” и возможно кнопку “Закрыть”.
3. для кнопки “OK” создать функцию def game(self): эта функция будет читать введённое значение и сравнивать, а так же очищать поле ввода.
4. для кнопки “Новая игра” создать функцию def new_game(self): эта функция будет генерировать случайное число и очищать поля ввода и вывода.

Если хотите могу выложить свой вариант.

Офлайн

#7 Янв. 16, 2019 14:29:15

GameStar
От: Новокузнецк
Зарегистрирован: 2014-12-04
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите в доработке игры

rami
1. если вы создаёте интерфейс в Дизайнере, то не нужно его конвертировать, лучше использовать в формате .ui, в этом случае его можно изменять в Дизайнере (а изменять его прийдётся много раз).
да, это я уже понял…))
rami
2. нужно добавить ещё кнопку “Новая игра” и возможно кнопку “Закрыть”.
хммм… даже не знаю, нужно ли это в таком маленьком проекте…
rami
Если хотите могу выложить свой вариант.
да, будет здорово. Заранее благодарен)

Отредактировано GameStar (Янв. 16, 2019 14:29:45)

Прикреплённый файлы:
attachment Guess-numbers.py (1,1 KБ)

Офлайн

#8 Янв. 16, 2019 14:30:36

GameStar
От: Новокузнецк
Зарегистрирован: 2014-12-04
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите в доработке игры

Попробую еще приложить дизайн:

Прикреплённый файлы:
attachment design.ui (2,9 KБ)

Офлайн

#9 Янв. 16, 2019 14:55:00

rami
Зарегистрирован: 2018-01-08
Сообщения: 280
Репутация: +  71  -
Профиль   Отправить e-mail  

Помогите в доработке игры

В архиве папка с файлами, файлы должны лежать в одной папке.

Прикреплённый файлы:
attachment Угадай число.zip (1,9 KБ)

Офлайн

#10 Янв. 16, 2019 16:36:33

GameStar
От: Новокузнецк
Зарегистрирован: 2014-12-04
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите в доработке игры

rami
спасибо огромное за помощь! сам бы я так не смог, конечно…). Теперь меня интересует только одно: как его скомпилировать из py в exe, чтобы можно было делиться с друзьями, например? у меня есть pyinstaller, я пишу в командной строке pyinstaller –onefile –noconsole (эти параметры я указываю в начале, сразу после слова “pyinstaller”, либо -F -w в конце и потом директорию и имя файла с расширением. Он компилирует, получается несколько папок, в папке dist лежит этот готовый файл, но после запуска ничего не происходит: комп долго думает, что-то как будто грузит и хоть бы что. Либо, если еще немного подождать - то выйдет ошибка что-то вроде “Failed to execu…” (не помню дальше текст). Как вообще компилить в exe, и желательно чтобы у файла была такая же иконка, как у окна?
И можно ли как-то сделать, чтобы размер файла был не очень большой? я до этого скомпилировал, и он получился не рабочий = 92 мб. А если рабочий? - за 100 мб перевалит?)) не многовато ли для такой простенькой игры?) нет, я конечно знаю, что PyQt5-проекты много весят, но не так же… О_о

Отредактировано GameStar (Янв. 16, 2019 16:42:07)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version