pycharm实现猜数游戏
作者:断情冢 发布时间:2023-01-14 19:04:49
标签:pycharm,猜数
本文实例为大家分享了pycharm实现猜数游戏的具体代码,供大家参考,具体内容如下
1. 设计界面
如下所示,利用QTdesigner设计的界面:
然后将设计好的界面转换为.py文件:
guess_number.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'guess_number.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(580, 328)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("../../../Icon/Comment.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
icon.addPixmap(QtGui.QPixmap("../../../Icon/Comment.svg"), QtGui.QIcon.Normal, QtGui.QIcon.On)
icon.addPixmap(QtGui.QPixmap("../../../Icon/Comment.svg"), QtGui.QIcon.Disabled, QtGui.QIcon.Off)
icon.addPixmap(QtGui.QPixmap("../../../Icon/Comment.svg"), QtGui.QIcon.Disabled, QtGui.QIcon.On)
icon.addPixmap(QtGui.QPixmap("../../../Icon/Comment.svg"), QtGui.QIcon.Active, QtGui.QIcon.Off)
icon.addPixmap(QtGui.QPixmap("../../../Icon/Comment.svg"), QtGui.QIcon.Active, QtGui.QIcon.On)
icon.addPixmap(QtGui.QPixmap("../../../Icon/Comment.svg"), QtGui.QIcon.Selected, QtGui.QIcon.Off)
icon.addPixmap(QtGui.QPixmap("../../../Icon/Comment.svg"), QtGui.QIcon.Selected, QtGui.QIcon.On)
MainWindow.setWindowIcon(icon)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout_4 = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout_4.setObjectName("gridLayout_4")
spacerItem = QtWidgets.QSpacerItem(20, 50, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_4.addItem(spacerItem, 0, 1, 1, 1)
spacerItem1 = QtWidgets.QSpacerItem(181, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_4.addItem(spacerItem1, 1, 3, 1, 1)
spacerItem2 = QtWidgets.QSpacerItem(180, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_4.addItem(spacerItem2, 1, 0, 1, 1)
self.gridLayout_3 = QtWidgets.QGridLayout()
self.gridLayout_3.setObjectName("gridLayout_3")
spacerItem3 = QtWidgets.QSpacerItem(17, 37, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_3.addItem(spacerItem3, 0, 2, 1, 1)
self.gridLayout_2 = QtWidgets.QGridLayout()
self.gridLayout_2.setObjectName("gridLayout_2")
self.button = QtWidgets.QPushButton(self.centralwidget)
self.button.setObjectName("button")
self.gridLayout_2.addWidget(self.button, 2, 1, 1, 1)
self.inputnumber = QtWidgets.QLineEdit(self.centralwidget)
self.inputnumber.setObjectName("inputnumber")
self.gridLayout_2.addWidget(self.inputnumber, 0, 0, 1, 3)
spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_2.addItem(spacerItem4, 2, 2, 1, 1)
spacerItem5 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_2.addItem(spacerItem5, 2, 0, 1, 1)
spacerItem6 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_2.addItem(spacerItem6, 1, 1, 1, 1)
self.gridLayout_3.addLayout(self.gridLayout_2, 1, 1, 2, 2)
spacerItem7 = QtWidgets.QSpacerItem(37, 17, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_3.addItem(spacerItem7, 1, 3, 1, 1)
spacerItem8 = QtWidgets.QSpacerItem(37, 17, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_3.addItem(spacerItem8, 1, 0, 1, 1)
spacerItem9 = QtWidgets.QSpacerItem(17, 37, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_3.addItem(spacerItem9, 3, 1, 1, 1)
self.gridLayout_4.addLayout(self.gridLayout_3, 1, 1, 1, 2)
spacerItem10 = QtWidgets.QSpacerItem(20, 49, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_4.addItem(spacerItem10, 2, 2, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 580, 28))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "猜数游戏"))
self.button.setText(_translate("MainWindow", "我猜"))
self.inputnumber.setText(_translate("MainWindow", "在这里输入数字"))
2.对ui界面的功能具体实现
如果直接使用生成好的.py文件使用起来不是很方便,修改界面以后重新生成的.py文件会直接覆盖,这里我采用一个新类直接获取前面设计好的界面从而实现算法与界面程序分离,先上代码。
main.py
import sys
import guess_number
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox, QWidget
from random import randint
class guess_ui(QMainWindow):
def __init__(self):
# get ui from guess_number
super().__init__()
self.num = randint(1, 100)
self.MainWindow = QMainWindow()
self.InitUI()
def InitUI(self):
ui = guess_number.Ui_MainWindow()
ui.setupUi(self)
button = self.findChild(QWidget, 'button')
button.clicked.connect(self.show_message)
self.show()
# self.MainWindow.show()
def show_message(self):
inputnumber = self.findChild(QWidget, 'inputnumber')
guessnumber = int(inputnumber.text())
print(guessnumber)
if guessnumber > self.num:
QMessageBox.about(self, 'see the result', 'bigger!')
inputnumber.setFocus()
elif guessnumber < self.num:
QMessageBox.about(self, 'see the result', 'smaller!')
inputnumber.setFocus()
else:
QMessageBox.about(self, 'see the result', 'true')
self.num = randint(1, 100)
inputnumber.clear()
inputnumber.setFocus()
def closeEvent(self, event):
reply = QMessageBox.question(self, 'confirm', 'Are you sure?', QMessageBox.Yes | QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
if __name__ == '__main__':
app = QApplication(sys.argv)
guess = guess_ui()
sys.exit(app.exec_())
3.对部分代码的解析
class guess_ui(QMainWindow):
将此类直接从QMainWindow继承过来可以实现对QT事件的重写,事件重现代码如下:
def closeEvent(self, event):
reply = QMessageBox.question(self, 'confirm', 'Are you sure?', QMessageBox.Yes | QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
在界面文件中按钮的定义是直接add进去的,所以定义某个控件功能首先要获取该控件,代码如下所示:
button = self.findChild(QWidget, 'button')
来源:https://blog.csdn.net/qq_35259785/article/details/110739511


猜你喜欢
- readline()方法从文件中读取一整行。尾部的换行符保持在字符串中。如果大小参数且非负,那么一个最大字节数,包括结尾的换行和
- 先给大家介绍下python pickle存储、读取大数据量列表、字典的数据针对于数据量比较大的列表、字典,可以采用将其加工为数据包来调用,减
- python安装教程和Pycharm安装详细教程,分享给大家。首先我们来安装python1、首先进入网站下载:点击打开链接(或自己输入网址h
- 滑动窗口算法是一种可以高效解决数组问题的算法。它通过维护一个固定大小的滑动窗口,来快速计算某些数组的相关指标或者求解一些特定的问题。这种算法
- ASP调用WEBSERVICE----INDEX----1. soap请求方式2. post请求方式3.&
- 前言配置火狐浏览器对应的selenium驱动一、火狐浏览器驱动下载下载地址根据对应的系统环境下载相应的压缩包(这里下载的是Windows系统
- 梯度下降(Gradient Descent)算法是机器学习中使用非常广泛的优化算法。当前流行的机器学习库或者深度学习库都会包括梯度下降算法的
- 本文实例讲述了Python subprocess模块功能与常见用法。分享给大家供大家参考,具体如下:一、简介subprocess最早在2.4
- 多线程编程当中, 线程的存在形态比较抽象. 通过前台线程\后台线程, 可以有效理解线程运行顺序.(复杂的多线程程序可以通过设置线程优先级实现
- 本文实例讲述了JS实现文字放大效果的方法。分享给大家供大家参考。具体实现方法如下:<!DOCTYPE html PUBLIC &quo
- 提到数组,大家都不陌生,什么是数组行列转置呢?其实也很简单,如下图所示,行列转置就是将数组元素的存放方式进行转换,原来保存在第一列的数据,将
- 1. 简述我们在用scrapy爬取数据时,首先就要明确我们要爬取什么数据。scrapy提供了Item对象这种简单的容器,我们可以通过Item
- 首先我们创建数据库表:CREATE TABLE `t_demo` ( `id` int(32) NOT NULL, `name` varch
- 1. 引言序列化是将对象转换为可以在以后保存和检索介质中的过程。比如,将对象的当前状态保存到文件中。对于一些复杂的项目,序列化是所有开发人员
- Anaconda 是一个基于 Python 的数据处理和科学计算平台,它已经内置了许多非常有用的第三方库,装上Anaconda,就相当于把
- MySQL服务器端的参数有很多,但是对于大多数初学者来说,众多的参数往往使得我们不知所措,但是哪些参数是需要我们调整的,哪些对服务器的性能影
- 其实网上已经有许多python语言书写的串口,但大部分都是python2写的,没有找到一个合适的python编写的串口助手,只能自己来写一个
- 本文实例讲述了js+html5通过canvas指定开始和结束点绘制线条的方法。分享给大家供大家参考。具体实现方法如下:<!DOCTYP
- 1. 原理孔洞指的是被前景像素点或者说感兴趣的像素点包围起来的区域,这个区域是我们不感兴趣的背景区域。数字图像处理的孔洞填充的公式为:I 为
- 在Oracle 8i版本之前,使用internal用户来执行数据库的启动和关闭以及create database等操作;从8i版本以后,Or