主要内容 #
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. 小结 #
- 猜一猜游戏判断数字函数的添加
- 猜一猜游戏消息框显示模块的添加
- 猜一猜游戏退出消息框的添加
习题 #
- 无