主要内容 #
1. 数字的判断 #
在类中编写一个成员函数,函数的功能是用于判断随机生成的数与玩家输入的数的大小关系。
且该函数需要和按钮做槽映射(即点击了按钮后会运行该函数),具体代码如下:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox, QLineEdit
from random import randint
class GuessGame(QWidget):
def __init__(self):
super().__init__()
self.initUI()
self.num = randint(1, 100) # 生成一个随机数,并赋值给类的一个属性
def initUI(self):
self.guessQPushBtn = QPushButton('猜一猜', self)
self.guessQPushBtn.setGeometry(115, 150, 70, 30)
self.numQLineEdit = QLineEdit('在这里输入数字', self)
self.numQLineEdit.selectAll()
self.numQLineEdit.setFocus()
self.numQLineEdit.setGeometry(80, 50, 150, 30)
self.guessQPushBtn.clicked.connect(self.judgeModule) # 将按钮与判断函数进行关联
self.setGeometry(200, 200, 500, 500)
self.setWindowTitle('猜一猜小游戏')
self.show()
def judgeModule(self):
guess_number = self.numQLineEdit.text() # 获取输入的内容
print(self.num)
if guess_number.isdigit(): # 判断是否是数字
guess_number = int(guess_number)
if guess_number > self.num:
print('猜的数字偏大')
elif guess_number < self.num:
print('猜的数字偏小')
else:
print('恭喜你,猜对了!')
else:
print('输入的不是数字,请重新输入')
app = QApplication(sys.argv)
ex = GuessGame()
app.exec_()
此时判断的结果还只是能在cmd界面展示(程序中用了print语句)。
还不能做到交互,如需要做到交互,需要添加消息框功能。
2. 消息框设置 #
针对如下四种不同结果来构建消息框:
非数字
猜的数字偏大
猜的数字偏小
猜中数字
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox, QLineEdit
from random import randint
class GuessGame(QWidget):
def __init__(self):
super().__init__()
self.initUI()
self.num = randint(1, 100) # 增加初始生成随机数
def initUI(self):
self.guessQPushBtn = QPushButton('猜一猜', self)
self.guessQPushBtn.setGeometry(115, 150, 70, 30)
self.numQLineEdit = QLineEdit('在这里输入数字', self)
self.numQLineEdit.selectAll()
self.numQLineEdit.setFocus()
self.numQLineEdit.setGeometry(80, 50, 150, 30)
self.guessQPushBtn.clicked.connect(self.judgeModule) # 将按钮与判断模块项映射
self.setGeometry(200, 200, 500, 500)
self.setWindowTitle('猜一猜小游戏')
self.show()
def judgeModule(self):
guess_number = self.numQLineEdit.text()
print(self.num)
if guess_number.isdigit():
guess_number = int(guess_number)
if guess_number > self.num:
self.showMessage(1, "猜的数字偏大!")
elif guess_number < self.num:
self.showMessage(1, "猜的数字偏小!")
else:
self.showMessage(1, "答对了!进入下一轮!", 1)
else:
self.showMessage(0, "输入的不是数字!请重新输入......")
def showMessage(self, int_flag, text="", right_flag=0):
if int_flag == 0: # 判断是否整型的标志位
QMessageBox.about(self, '提示', text)
else:
QMessageBox.about(self, '结果', text)
if right_flag == 1: # 判断当结果正好猜中时,需要重新生成随机数,且清除文本框
self.num = randint(1, 100)
self.numQLineEdit.clear()
self.numQLineEdit.setFocus()
app = QApplication(sys.argv)
ex = GuessGame()
app.exec_()
如上代码是对不同情况对判断,都使用消息框来显示内容。
3. 退出游戏设置 #
以下程序添加了退出的消息框。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox, QLineEdit
from random import randint
class GuessGame(QWidget):
def __init__(self):
super().__init__()
self.initUI()
self.num = randint(1, 100)
def initUI(self):
self.guessQPushBtn = QPushButton('猜一猜', self)
self.guessQPushBtn.setGeometry(115, 150, 70, 30)
self.numQLineEdit = QLineEdit('在这里输入数字', self)
self.numQLineEdit.selectAll()
self.numQLineEdit.setFocus()
self.numQLineEdit.setGeometry(80, 50, 150, 30)
self.guessQPushBtn.clicked.connect(self.judgeModule)
self.setGeometry(200, 200, 500, 500)
self.setWindowTitle('猜一猜小游戏')
self.show()
def judgeModule(self):
guess_number = self.numQLineEdit.text()
print(self.num)
if guess_number.isdigit():
guess_number = int(guess_number)
if guess_number > self.num:
self.showMessage(1, "猜的数字偏大!")
elif guess_number < self.num:
self.showMessage(1, "猜的数字偏小!")
else:
self.showMessage(1, "答对了!进入下一轮!", 1)
else:
self.showMessage(0, "输入的不是数字!请重新输入......")
def showMessage(self, int_flag, text="", right_flag=0):
if int_flag == 0: # 判断是否整型的标志位
QMessageBox.about(self, '提示', text)
else:
QMessageBox.about(self, '结果', text)
if right_flag == 1: # 判断当结果正好猜中时,需要重新生成随机数,且清除文本框
self.num = randint(1, 100)
self.numQLineEdit.clear()
self.numQLineEdit.setFocus()
def closeEvent(self, event): # 退出事件槽函数, 无需在代码中显式调用
reply = QMessageBox.question(self, '确认', '确认退出吗', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
app = QApplication(sys.argv)
ex = GuessGame()
app.exec_()
以上程序便是一个简单且完整的猜一猜小游戏的整体代码
4. 小结 #
- 猜一猜游戏判断数字函数的添加
- 猜一猜游戏消息框显示模块的添加
- 猜一猜游戏退出消息框的添加
习题 #
- 无