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_())