PyQt5 - 猜数字小游戏2

代码

# -*- coding: utf-8 -*-
# @Author   : zbz


import os
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from random import randint


class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.set_attr()  # ==> 设置一些属性
        self.init_ui()
        QMessageBox.about(self, "提示", "第一步:在输入框中 输入数字\n第二步:点击按钮 点我试试")

    def set_attr(self):
        self.num = randint(1, 100)  # ==> 要猜测的答案
        self.ico_fpath = "./ico/Porsche.ico"  # ==> 窗口图标的路径
        if not os.path.exists(self.ico_fpath):
            print("图标路径 ({}) 不存在".format(self.ico_fpath))
        self.w_title = "点击 点我试试 检测你的猜测,不想玩了就点击退出哦"
        self.guess_btn_name = "点我试试"
        self.quit_btn_name = "退出"
        self.input_error = 0  # ==> 输入有误的次数
        self.guess_count = 0  # ==> 猜测总计次数
        self.guess_wrong_count = 0  # ==> 猜错次数

    def init_ui(self):
        self.resize(1000, 600)
        self.setWindowTitle(self.w_title)
        self.setWindowIcon(QIcon(self.ico_fpath))

        self.guess_btn = QPushButton(self.guess_btn_name, self)
        self.guess_btn.setGeometry(450, 300, 100, 50)  # ==> 按钮的 坐标 及 宽高度
        self.guess_btn.setToolTip('<b>点击这里猜数字</b>')
        self.guess_btn.clicked.connect(self.show_message)

        self.text = QLineEdit('这里是输入框,在这里输入数字,范围1-100', self)
        self.text.setFont(QFont("YouYuan", 22))
        self.text.setToolTip('<b>这里输入你的猜测</b>')
        self.text.selectAll()  # ==> 文本全选
        self.text.setFocus()  # ==> 获得光标焦点
        self.text.setGeometry(100, 100, 800, 50)

        self.quit_btn = QPushButton(self.quit_btn_name, self)
        self.quit_btn.setToolTip("退出窗口程序")
        self.quit_btn.setGeometry(450, 400, 100, 50)
        self.quit_btn.clicked.connect(self.close)  # ==> # close方法实际是调用了closeEvent方法

    def show_message(self):
        try:
            guess_num = int(self.text.text())
        except:
            if self.input_error >= 3:
                self.input_error = 0
                self.text.setText("请你输入数字好吗?连续输错三遍了,猪吗?")
                QMessageBox.warning(self, "温馨小提示", "请看上方输入框")
            else:
                self.input_error += 1
                self.text.setText("请你输入数字好吗?")
            self.text.selectAll()
            self.text.setFocus()
            return
        self.guess_count += 1
        if self.guess_wrong_count >= 6:
            QMessageBox.warning(self, "警告", "你个大笨蛋,连续猜6次了,还猜不到")
            self.guess_wrong_count = 0
        if 100 >= guess_num > self.num:
            self.guess_wrong_count += 1
            print("第{}次猜测,答案 > {}(你的猜测)".format(self.guess_count, guess_num))
            self.text.setText("猜大了,请重新输入")
            self.text.selectAll()
            self.text.setFocus()
        elif 0 <= guess_num < self.num:
            self.guess_wrong_count += 1
            print("第{}次猜测,答案 < {}(你的猜测)".format(self.guess_count, guess_num))
            self.text.setText("猜小了,请重新输入")
            self.text.selectAll()
            self.text.setFocus()
        elif guess_num == self.num:
            print("第{}次猜测,你的猜测是 {} = 答案".format(self.guess_count, guess_num))
            QMessageBox.about(self, '恭喜你', '答对了,进入下一轮')
            self.text.setText("在这里输入数字,范围1-100")
            self.text.selectAll()
            self.text.setFocus()
            self.num = randint(1, 100)  # ==> 生成新的猜测答案
            self.guess_count = 0  # ==> 猜测重新计数
            self.guess_wrong_count = 0  # ==> 猜测重新计数
        else:
            self.text.setText("请输入1-100范围的数字")
            self.text.selectAll()
            self.text.setFocus()

    # 窗口右上角关闭事件
    def closeEvent(self, event):  # ==> event: 事件
        reply = QMessageBox.question(self, '确认退出', '不爱我了对不对?')
        if reply == QMessageBox.Yes:
            print("程序退出 --> 右上角关闭")
            event.accept()
        else:
            self.text.selectAll()
            self.text.setFocus()
            event.ignore()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值