PyQt5
pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple
PyQt5保姆级入门教程——从安装到使用_pyqt5安装教程-优快云博客
import sys
import random
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout, QHBoxLayout, \
QMessageBox, QFrame, QSizePolicy
from PyQt5.QtCore import Qt
class GuessNumberGame(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('猜数游戏')
self.setGeometry(100, 100, 500, 500) # 设置窗口大小
vbox = QVBoxLayout()
self.guess_label = QLabel('猜猜看:')
self.guess_input = QLineEdit()
self.guess_button = QPushButton('确定')
self.guess_label.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
self.guess_input.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
self.guess_button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
guess_hbox = QHBoxLayout()
guess_hbox.addWidget(self.guess_label)
guess_hbox.addWidget(self.guess_input)
guess_hbox.addWidget(self.guess_button)
vbox.addLayout(guess_hbox)
vbox.addWidget(self.create_separator())
self.result_label = QLabel('你猜的结果:')
self.result_output = QLabel('等待游戏开始')
self.result_output.setAlignment(Qt.AlignCenter)
self.result_output.setFixedHeight(50)
vbox.addWidget(self.result_label)
vbox.addWidget(self.result_output)
vbox.addWidget(self.create_separator())
# Guess count section
self.count_label = QLabel('猜测次数:')
self.count_output = QLabel('0')
self.count_output.setAlignment(Qt.AlignCenter)
self.count_output.setFixedHeight(50)
vbox.addWidget(self.count_label)
vbox.addWidget(self.count_output)
vbox.addWidget(self.create_separator())
self.player_label = QLabel('请输入人数:')
self.player_input = QLineEdit()
self.player_input.setFixedHeight(30)
vbox.addWidget(self.player_label)
vbox.addWidget(self.player_input)
vbox.addWidget(self.create_separator())
self.game_result_label = QLabel('游戏结果:')
self.game_result_output = QLabel('等待游戏开始')
self.game_result_output.setAlignment(Qt.AlignCenter)
self.game_result_output.setFixedHeight(100)
vbox.addWidget(self.game_result_label)
vbox.addWidget(self.game_result_output)
vbox.addWidget(self.create_separator())
self.start_button = QPushButton('游戏开始')
self.quit_button = QPushButton('退出')
self.start_button.setFixedHeight(40)
self.quit_button.setFixedHeight(40)
control_hbox = QHBoxLayout()
control_hbox.addWidget(self.start_button)
control_hbox.addWidget(self.quit_button)
vbox.addLayout(control_hbox)
self.setLayout(vbox)
self.guess_button.clicked.connect(self.make_guess)
self.start_button.clicked.connect(self.start_game)
self.quit_button.clicked.connect(self.close)
self.target_number = None
self.current_player = 0
self.players = []
self.current_guess_count = 0
def create_separator(self):
separator = QFrame()
separator.setFrameShape(QFrame.HLine)
separator.setFrameShadow(QFrame.Sunken)
separator.setFixedHeight(20)
return separator
def start_game(self):
try:
num_players = int(self.player_input.text())
if num_players <= 0:
raise ValueError('人数必须大于0')
self.players = [{'id': i+1, 'guesses': []} for i in range(num_players)]
self.current_player = 0
self.current_guess_count = 0
self.result_output.setText('等待游戏开始')
self.count_output.setText('0')
self.game_result_output.setText('等待游戏开始')
self.target_number = random.randint(1, 500)
QMessageBox.information(self, '游戏开始', '游戏已开始,当前玩家: 1')
except ValueError:
QMessageBox.warning(self, '输入错误', '请输入有效的玩家人数')
def make_guess(self):
if self.target_number is None:
QMessageBox.warning(self, '游戏未开始', '请先点击"游戏开始"按钮')
return
try:
guess = int(self.guess_input.text())
if guess < 1 or guess > 500:
raise ValueError('数字必须在1到500之间')
self.current_guess_count += 1
if guess < self.target_number:
self.result_output.setText('猜小了')
elif guess > self.target_number:
self.result_output.setText('猜大了')
else:
self.result_output.setText('猜中了')
self.players[self.current_player]['guesses'].append(self.current_guess_count)
self.current_player += 1
if self.current_player < len(self.players):
self.target_number = random.randint(1, 500)
self.current_guess_count = 0
QMessageBox.information(self, '下一玩家', f'下一玩家: {self.current_player + 1}')
else:
self.show_results()
self.target_number = None
self.count_output.setText(str(self.current_guess_count))
except ValueError as e:
QMessageBox.warning(self, '输入错误', str(e))
def show_results(self):
results = sorted(self.players, key=lambda x: min(x['guesses']))
result_text = '\n'.join([f'玩家 {p["id"]}: {min(p["guesses"])} 次' for p in results])
self.game_result_output.setText(result_text)
if __name__ == '__main__':
app = QApplication(sys.argv)
game = GuessNumberGame()
game.show()
sys.exit(app.exec_())
put.setText(result_text)
if name == ‘main’:
app = QApplication(sys.argv)
game = GuessNumberGame()
game.show()
sys.exit(app.exec_())