python side2 整理实现前端和后端分离的代码模板

1、Ui_MainWidget.py



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

import sys
from PySide2.QtWidgets import *
from PySide2.QtGui import *
from PySide2.QtCore import *
from PySide2 import QtCore, QtGui, QtWidgets
import Ui_SlaveWidget



class Ui_MainWindow(QMainWindow):

    #自定义信号
    ui_send_signal=QtCore.Signal(str)


    def __init__(self):
        super().__init__()
        self.width = 1280
        self.height = 720

        # 设置软件图标(可省略)
        # self.setWindowIcon(QtGui.QIcon("icon.ico"))
        # 设置主界面标题
        self.setWindowTitle("面向对象课程第二十小组作品")
        # 设置固定尺寸
        self.setFixedSize(self.width, self.height)
        # 设置主界面背景色
        self.setStyleSheet("background-color:rgb(84,82,119)")
        self.init_widget()
        
    def init_widget(self):
        # 1. 创建一级菜单栏
        # 1.1 创建一级菜单栏的窗口
        self.widget_menu = QtWidgets.QWidget(self)  # 注意,传入参数代表一个从属关系,表示创建的QWidget属于self,也就是MainWindow自身
        self.widget_menu.setObjectName("widget_menu")
        # 设置窗口的左上角x,y,窗口的width和height
        self.widget_menu.setGeometry(QtCore.QRect(0, 0, 1280, 50))
        self.widget_menu.setStyleSheet("QWidget{background-color:rgb(123,223,223);border:2px solid balck;}")
        # 1.2 创建一个水平布局
        self.menuLayout = QHBoxLayout(self.widget_menu)
        # 1.3 设置水平布局的属性
        self.menuLayout.setSpacing(30)  # 设置间距
        self.menuLayout.setDirection(QHBoxLayout.Direction.LeftToRight)
        self.menuLayout.addSpacing(30)  # 最左端增加30像素的间距
        
        # 1.4 为菜单栏设置按钮组
        self.menuButtonGroup = QButtonGroup()
        # 1.5设置文字和字体
        menuStr = []
        menuStr.append("AAA")
        menuStr.append("BBB")
        menuStr.append("CCC")
        self.font = QFont()  # 设置字样式
        self.font.setFamily("黑体")  # 设置字体
        self.font.setBold(1)  # 设置为粗体
        self.font.setPixelSize(24)  # 字体大小
        
        # 1.5 添加按钮至按钮组
        count = 0  # 设置按钮在按钮组内的序号
        for menu_str in menuStr:
            menuBtn = QPushButton()  # 创建按钮
            menuBtn.setStyleSheet("QPushButton{color:rgb(0,0,0);border:none;}""QPushButton::checked{color:rgb(58,164,98)}")
            menuBtn.setFont(self.font)  # 加载字体
            menuBtn.setText(menu_str)  # 加载文字
            
            menuBtn.setParent(self.widget_menu)  # 属于一级菜单栏的窗口
            menuBtn.setCheckable(True)
            self.menuLayout.addWidget(menuBtn)  # 一级菜单栏的水平布局中添加该按钮
            self.menuButtonGroup.addButton(menuBtn, count)  # 把按钮添加到按钮组中
            count += 1

        # 1.6 将按钮组内的按钮设置为互斥
        self.menuButtonGroup.setExclusive(True)
        # 1.7 菜单栏最后再添加弹簧
        self.menuLayout.addStretch()



		# 2.创建二级菜单栏
        # 2.1 创建多分页窗口
        self.stackedWidget_func = QtWidgets.QStackedWidget(self) # QStackedWidget表示多分页的窗口
        self.stackedWidget_func.setObjectName("stackedWidget_func")
        self.stackedWidget_func.setGeometry(QtCore.QRect(0, 80, 1280, 560))
        self.stackedWidget_func.setStyleSheet("QWidget{background-color:rgb(211,240,168);border:none}")
        # 2.2 创建分页对象,并载入分页
        self.file_page = Ui_SlaveWidget.AAA_Page()
        self.stackedWidget_func.addWidget(self.file_page)
        self.common_page = Ui_SlaveWidget.BBB_Page()
        self.stackedWidget_func.addWidget(self.common_page)
        self.advance_page = Ui_SlaveWidget.CCC_Page()
        self.stackedWidget_func.addWidget(self.advance_page)


        # 创建button_Start
        self.button_Start = QPushButton()
        self.button_Start.setStyleSheet("QPushButton{color:white;background-color:rgb(51,204,255);}""QPushButton:pressed{background-color:rgb(51,129,172)}")
        self.button_Start.setFont(self.font)
        self.button_Start.setText("start")
        self.button_Start.setFixedHeight(50)
        self.button_Start.setFixedWidth(120)
        self.button_Start.setParent(self)
        #self.button_Start.setCheckable(True)
        self.button_Start.setGeometry(QtCore.QRect(200,650,120,50))
        self.button_Start.clicked.connect(self.slot_SendClicked)
      


    def slot_SendClicked(self):
        self.ui_send_signal.emit('发出start信号')
        print('发出start信号')

    def slot_ReceiveData(self,str):
        if str=='1':
            self.menuButtonGroup.button(0).setStyleSheet("QPushButton{color:rgb(255,0,0);border:none;}""QPushButton::checked{color:rgb(58,164,98)}")
            self.menuButtonGroup.button(1).setStyleSheet("QPushButton{color:rgb(0,0,0);border:none;}""QPushButton::checked{color:rgb(58,164,98)}")
            self.menuButtonGroup.button(2).setStyleSheet("QPushButton{color:rgb(0,0,0);border:none;}""QPushButton::checked{color:rgb(58,164,98)}")
            self.stackedWidget_func.setCurrentIndex(0)
        elif str=='2':
            self.menuButtonGroup.button(0).setStyleSheet("QPushButton{color:rgb(0,0,0);border:none;}""QPushButton::checked{color:rgb(58,164,98)}")
            self.menuButtonGroup.button(1).setStyleSheet("QPushButton{color:rgb(255,0,0);border:none;}""QPushButton::checked{color:rgb(58,164,98)}")
            self.menuButtonGroup.button(2).setStyleSheet("QPushButton{color:rgb(0,0,0);border:none;}""QPushButton::checked{color:rgb(58,164,98)}")
            self.stackedWidget_func.setCurrentIndex(1)
        elif str=='3':
            self.menuButtonGroup.button(0).setStyleSheet("QPushButton{color:rgb(0,0,0);border:none;}""QPushButton::checked{color:rgb(58,164,98)}")
            self.menuButtonGroup.button(1).setStyleSheet("QPushButton{color:rgb(0,0,0);border:none;}""QPushButton::checked{color:rgb(58,164,98)}")
            self.menuButtonGroup.button(2).setStyleSheet("QPushButton{color:rgb(255,0,0);border:none;}""QPushButton::checked{color:rgb(58,164,98)}")
            self.stackedWidget_func.setCurrentIndex(2)

        print('收到receive信号:'+str)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Ui_MainWindow()
    w.show()
    sys.exit(app.exec())

2、Ui_SlaveWidget.py


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

from PySide2.QtWidgets import *
from PySide2.QtGui import *
from PySide2.QtCore import *

class AAA_Page(QWidget):
    def __init__(self):
        super().__init__()
        # 创建水平布局
        self.hLayout = QHBoxLayout(self)
        self.hLayout.setContentsMargins(0, 0, 0, 0)  # 设置水平布局在Widget内上下左右的间距
        self.hLayout.setSpacing(10)  # 设置间距
        self.hLayout.setDirection(QHBoxLayout.Direction.LeftToRight)# 自左向右的布局
     
        self.hLayout.addSpacing(10)  # 左侧空隙

        self.font = QFont()
        self.font.setFamily("黑体")
        self.font.setBold(1)  # 设置为粗体
        self.font.setPixelSize(24)  # 字体大小

        # 创建a1图像按钮
        self.btn_a1 = QPushButton() # 创建按钮
        self.btn_a1.setStyleSheet("QPushButton{color:white;background-color:rgb(51,204,255);font-family:黑体;}"
                                      "QPushButton:pressed{background-color:rgb(51,129,172)}")
        self.btn_a1.setFont(self.font)
        self.btn_a1.setText("a1")
        self.btn_a1.setFixedHeight(50)
        self.btn_a1.setFixedWidth(120)
        self.btn_a1.setParent(self)
        self.btn_a1.setCheckable(True)
        self.btn_a1.clicked.connect(self.slot_a1)
        self.hLayout.addWidget(self.btn_a1)

        # 创建a2图标
        self.btn_a2 = QPushButton()
        self.btn_a2.setStyleSheet("QPushButton{color:white;background-color:rgb(51,204,255);}"
                                      "QPushButton:pressed{background-color:rgb(51,129,172)}")
        self.btn_a2.setFont(self.font)
        self.btn_a2.setText("a2")
        self.btn_a2.setFixedHeight(50)
        self.btn_a2.setFixedWidth(120)
        self.btn_a2.setParent(self)
        self.btn_a2.setCheckable(True)
        self.btn_a2.clicked.connect(self.slot_a2)
        self.hLayout.addWidget(self.btn_a2)


        # 创建a3图标
        self.btn_a3 = QPushButton()
        self.btn_a3.setStyleSheet("QPushButton{color:white;background-color:rgb(51,204,255)}"
                                      "QPushButton:pressed{background-color:rgb(51,129,172)}")
        self.btn_a3.setFont(self.font)
        self.btn_a3.setText("a3")
        self.btn_a3.setFixedHeight(50)
        self.btn_a3.setFixedWidth(120)
        self.btn_a3.setParent(self)
        self.btn_a3.setCheckable(True)

        self.btn_a3.clicked.connect(self.slot_a3)
        self.hLayout.addWidget(self.btn_a3)

        # 最后,在尾端添加弹簧,以至于布局呈现靠左而不是居中
        self.hLayout.addStretch()
        
    def slot_a1(self):
        print("slot_a1 ")
        
    def slot_a2(self):
        print("slot_a2 ")
        
    def slot_a3(self):
        print("slot_a3 ")

#BBB

class BBB_Page(QWidget):
    def __init__(self):
        super().__init__()
        # 创建水平布局
        self.hLayout = QHBoxLayout(self)
        self.hLayout.setContentsMargins(0, 0, 0, 0)  # 设置水平布局在Widget内上下左右的间距
        self.hLayout.setSpacing(10)  # 设置间距
        self.hLayout.setDirection(QHBoxLayout.Direction.LeftToRight)# 自左向右的布局
    
        self.hLayout.addSpacing(10)  # 左侧空隙

        self.font = QFont()
        self.font.setFamily("黑体")
        self.font.setBold(1)  # 设置为粗体
        self.font.setPixelSize(24)  # 字体大小

        # 创建a1图像按钮
        self.btn_a1 = QPushButton() # 创建按钮
        self.btn_a1.setStyleSheet("QPushButton{color:white;background-color:rgb(51,204,255);font-family:黑体;}"
                                      "QPushButton:pressed{background-color:rgb(51,129,172)}")
        self.btn_a1.setFont(self.font)
        self.btn_a1.setText("a4")
        self.btn_a1.setFixedHeight(50)
        self.btn_a1.setFixedWidth(120)
        self.btn_a1.setParent(self)
        self.btn_a1.setCheckable(True)
        self.btn_a1.clicked.connect(self.slot_a1)
        self.hLayout.addWidget(self.btn_a1)

        # 创建a2图标
        self.btn_a2 = QPushButton()
        self.btn_a2.setStyleSheet("QPushButton{color:white;background-color:rgb(51,204,255);}"
                                      "QPushButton:pressed{background-color:rgb(51,129,172)}")
        self.btn_a2.setFont(self.font)
        self.btn_a2.setText("a5")
        self.btn_a2.setFixedHeight(50)
        self.btn_a2.setFixedWidth(120)
        self.btn_a2.setParent(self)
        self.btn_a2.setCheckable(True)
        self.btn_a2.clicked.connect(self.slot_a2)
        self.hLayout.addWidget(self.btn_a2)


        # 创建a3图标
        self.btn_a3 = QPushButton()
        self.btn_a3.setStyleSheet("QPushButton{color:white;background-color:rgb(51,204,255)}"
                                      "QPushButton:pressed{background-color:rgb(51,129,172)}")
        self.btn_a3.setFont(self.font)
        self.btn_a3.setText("a6")
        self.btn_a3.setFixedHeight(50)
        self.btn_a3.setFixedWidth(120)
        self.btn_a3.setParent(self)
        self.btn_a3.setCheckable(True)
        self.btn_a3.clicked.connect(self.slot_a3)
        self.hLayout.addWidget(self.btn_a3)

        # 最后,在尾端添加弹簧,以至于布局呈现靠左而不是居中
        self.hLayout.addStretch()
        
    def slot_a1(self):
        print("slot_a4 ")
        
    def slot_a2(self):
        print("slot_a5 ")
        
    def slot_a3(self):
        print("slot_a6 ")

#CCC
class CCC_Page(QWidget):
    def __init__(self):
        super().__init__()
        # 创建水平布局
        self.hLayout = QHBoxLayout(self)
        self.hLayout.setContentsMargins(0, 0, 0, 0)  # 设置水平布局在Widget内上下左右的间距
        self.hLayout.setSpacing(10)  # 设置间距
        self.hLayout.setDirection(QHBoxLayout.Direction.LeftToRight)# 自左向右的布局
        self.hLayout.addSpacing(10)  # 左侧空隙

        self.font = QFont()
        self.font.setFamily("黑体")
        self.font.setBold(1)  # 设置为粗体
        self.font.setPixelSize(24)  # 字体大小

        # 创建a1图像按钮
        self.btn_a1 = QPushButton() # 创建按钮
        self.btn_a1.setStyleSheet("QPushButton{color:white;background-color:rgb(51,204,255);font-family:黑体;}"
                                      "QPushButton:pressed{background-color:rgb(51,129,172)}")
        self.btn_a1.setFont(self.font)
        self.btn_a1.setText("a7")
        self.btn_a1.setFixedHeight(50)
        self.btn_a1.setFixedWidth(120)
        self.btn_a1.setParent(self)
        self.btn_a1.setCheckable(True)
        self.btn_a1.clicked.connect(self.slot_a1)
        self.hLayout.addWidget(self.btn_a1)

        # 创建a2图标
        self.btn_a2 = QPushButton()
        self.btn_a2.setStyleSheet("QPushButton{color:white;background-color:rgb(51,204,255);}"
                                      "QPushButton:pressed{background-color:rgb(51,129,172)}")
        self.btn_a2.setFont(self.font)
        self.btn_a2.setText("a8")
        self.btn_a2.setFixedHeight(50)
        self.btn_a2.setFixedWidth(120)
        self.btn_a2.setParent(self)
        self.btn_a2.setCheckable(True)
        self.btn_a2.clicked.connect(self.slot_a2)
        self.hLayout.addWidget(self.btn_a2)


        # 创建a3图标
        self.btn_a3 = QPushButton()
        self.btn_a3.setStyleSheet("QPushButton{color:white;background-color:rgb(51,204,255)}"
                                      "QPushButton:pressed{background-color:rgb(51,129,172)}")
        self.btn_a3.setFont(self.font)
        self.btn_a3.setText("a9")
        self.btn_a3.setFixedHeight(50)
        self.btn_a3.setFixedWidth(120)
        self.btn_a3.setParent(self)
        self.btn_a3.setCheckable(True)
        self.btn_a3.clicked.connect(self.slot_a3)
        self.hLayout.addWidget(self.btn_a3)

        # 最后,在尾端添加弹簧,以至于布局呈现靠左而不是居中
        self.hLayout.addStretch()
        
    def slot_a1(self):
        print("slot_a7 ")
        
    def slot_a2(self):
        print("slot_a8 ")
        
    def slot_a3(self):
        print("slot_a9 ")

3、Thread_Main.py

from PySide2.QtCore import QThread, Signal
import time

class thread01(QThread):
    # 使用信号和UI主线程通讯
    thread_signal = Signal(str)

    def __init__(self, time=1, parent=None):
        super(thread01, self).__init__(parent)

        self.delay_time = time  #设置延时时间
    
    def receive_slot(self,str):
        print(str)
        self.thread_signal.emit('信号从thread01线程发出')
        self.start()

    def run(self):
        print('正在进行延时{0}秒'.format(self.delay_time))
        time.sleep(self.delay_time)
        
        self.thread_signal.emit('1')
        time.sleep(self.delay_time)
        self.thread_signal.emit('2')
        time.sleep(self.delay_time)
        self.thread_signal.emit('3')
        self.thread_signal.emit('结束信号:延时{0}结束'.format(self.delay_time))
        return

4、Main.py

from PySide2.QtCore import Signal
from PySide2.QtWidgets import QApplication,QMainWindow
from Ui_MainWidget import Ui_MainWindow
import sys,time,datetime
import Thread_Main


if __name__ == '__main__':
    app = QApplication(sys.argv)
    # 设置style
    #styleFile = './css.qss'
    #qssStyle = CommonHelper.readQss(styleFile)
    #app.setStyleSheet(qssStyle)
    # 显示窗口
    win =Ui_MainWindow()

    threaddata=Thread_Main.thread01(3)
    #下一步增加什么功能
    win.ui_send_signal.connect(threaddata.receive_slot)
    threaddata.thread_signal.connect(win.slot_ReceiveData)
    win.show()
    sys.exit(app.exec_())


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值