PyQt5小游戲猜數(shù)字

回顧一下GUI編程流程,設(shè)計(jì)UI界面->設(shè)計(jì)邏輯功能->測(cè)試->打包。

今天先用一個(gè)小栗子說(shuō)明這個(gè)過(guò)程,這次想做個(gè)猜數(shù)字的小游戲,程序自動(dòng)生成一個(gè)隨機(jī)的100以?xún)?nèi)的整數(shù),然后用戶(hù)輸入猜測(cè)的數(shù)字,程序會(huì)提示猜大了還是猜小了,如果用二分法的話(huà),7次以?xún)?nèi)應(yīng)該能夠猜中。

  1. 首先我們打開(kāi)designer,設(shè)計(jì)我們的小游戲界面。如下圖所示:


    UI界面

    我們新建了一個(gè)QWidget作為程序外框,內(nèi)部加入了一個(gè)空間容器QWidget,在此容器中加入了我們主要控件lineEdit和pushButton,并利用Spacers和Layout達(dá)到了我們希望的布局效果。保存ui文件。

  2. 利用pyuic將我們的ui文件轉(zhuǎn)化為py文件,并在主文件中導(dǎo)入該文件。
    這是ui文件轉(zhuǎn)化為的py文件。

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'Guess_number.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(476, 361)
        self.verticalLayout_3 = QtWidgets.QVBoxLayout(Form)
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
        self.verticalLayout_2.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint)
        self.verticalLayout_2.setContentsMargins(-1, -1, -1, 0)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.widget = QtWidgets.QWidget(Form)
        self.widget.setObjectName("widget")
        self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.widget)
        self.verticalLayout_5.setObjectName("verticalLayout_5")
        self.verticalLayout_4 = QtWidgets.QVBoxLayout()
        self.verticalLayout_4.setObjectName("verticalLayout_4")
        spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.verticalLayout_4.addItem(spacerItem)
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_2.addItem(spacerItem1)
        self.lineEdit = QtWidgets.QLineEdit(self.widget)
        self.lineEdit.setInputMask("")
        self.lineEdit.setObjectName("lineEdit")
        self.horizontalLayout_2.addWidget(self.lineEdit)
        spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_2.addItem(spacerItem2)
        self.verticalLayout_4.addLayout(self.horizontalLayout_2)
        spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.verticalLayout_4.addItem(spacerItem3)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem4)
        self.pushButton = QtWidgets.QPushButton(self.widget)
        self.pushButton.setObjectName("pushButton")
        self.horizontalLayout.addWidget(self.pushButton)
        spacerItem5 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem5)
        self.verticalLayout_4.addLayout(self.horizontalLayout)
        spacerItem6 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.verticalLayout_4.addItem(spacerItem6)
        self.verticalLayout_5.addLayout(self.verticalLayout_4)
        self.verticalLayout_2.addWidget(self.widget)
        self.verticalLayout_3.addLayout(self.verticalLayout_2)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "猜數(shù)字(100以?xún)?nèi))"))
        self.lineEdit.setText(_translate("Form", "在這里輸入數(shù)字"))
        self.pushButton.setToolTip(_translate("Form", "點(diǎn)擊這里猜數(shù)字"))
        self.pushButton.setText(_translate("Form", "我猜"))


接下來(lái)我們?cè)谥鞒绦蛑幸朐撐募?/p>

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

from Guess_number import Ui_Form # 引入ui轉(zhuǎn)化的py文件
from random import randint # 隨機(jī)數(shù)庫(kù)

class Dialog(QWidget,Ui_Form): # 此處引用導(dǎo)入的ui
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)
        self.setupUi(self)
        self.num = randint(1, 100)
        self.lineEdit.selectAll() # 設(shè)置輸入框全選
        self.lineEdit.setFocus() # 設(shè)置焦點(diǎn)
        self.pushButton.clicked.connect(self.showMessage) # 按鈕連接至我們的邏輯函數(shù)

    def showMessage(self):
        guessnumber = self.lineEdit.text()
        if guessnumber.isdigit():
            guessnumber = int(self.lineEdit.text())
            if guessnumber > self.num:
                QMessageBox.about(self, '結(jié)果', '猜大了!')
                self.lineEdit.selectAll()
                self.lineEdit.setFocus()
            elif guessnumber < self.num:
                QMessageBox.about(self, '結(jié)果', '猜小了!')
                self.lineEdit.selectAll()
                self.lineEdit.setFocus()
            else:
                QMessageBox.about(self, '結(jié)果', '答對(duì)了!進(jìn)入下一輪!')
                self.num = randint(1, 100)
                self.lineEdit.clear()
                self.lineEdit.selectAll()
                self.lineEdit.setFocus()
        else:
            self.input_error()

    def closeEvent(self, event): # 重寫(xiě)關(guān)閉動(dòng)作,彈出消息框以確認(rèn)
        reply = QMessageBox.question(self, '確認(rèn)', '確認(rèn)退出嗎',QMessageBox.Yes |QMessageBox.No, QMessageBox.No)
        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()

    def keyPressEvent(self, event): # 將鍵盤(pán)輸入enter綁定在按鈕上
        if (event.key() == Qt.Key_Enter):
            self.pushButton.click()
        if (event.key() == 16777220):
            self.pushButton.click()

    def input_error(self):
        QMessageBox.critical(self, "錯(cuò)誤", "輸入錯(cuò)誤請(qǐng)重新輸入")
        self.lineEdit.selectAll()
        self.lineEdit.setFocus()

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    window = Dialog()
    window.show()
    sys.exit(app.exec_())
  1. 運(yùn)行試試看


  1. 最后利用pyinstaller打包文件,生成exe,pyinstaller的簡(jiǎn)單使用大家可以去查閱一下之前的文章。生成的exe就在dist文件夾下。


按照這個(gè)流程就可以自己去做一些自己想做的程序了哈。

自己要學(xué)習(xí)的東西還有很多,和別人的差距還是很大,有點(diǎn)小苦惱哎~~~
不過(guò)時(shí)間是自己擠出來(lái)的,爭(zhēng)取少玩一些游戲,少看些劇和綜藝!
加油,晚安~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容