1、新建6个窗体,物理尺寸是一样大的。其中一个导入背景图片,作为系统启动时展示的页面,命名为W_b.ui,其余命名为W_1.ui~W_5.ui。
2、导入以上的ui,并将W_0左窗体的各个按钮点击事件与各个窗口的显示和隐藏事件连接起来。
主程序代码如下:
#这个是主函数 import sys, time from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5 import uic, QtCore from ClockPulse import Clocker #自定义的周期脉冲函数,默认参数下周期为1s import logos, bkgrd #导入图像资源 timer_1s = Clocker() # 定义全局1s的周期定时器 timer_05s = Clocker(500) # 定义全局500ms的周期定时器 class UiObject(QObject): # 定义一个Object # 信号的定义必须在函数体之前,否则会报错以下内容: # 'PyQt5.QtCore.pyqtSignal' object has no attribute 'connect' # # forms = [] # 窗口实体的列表,方便集中控制和管理 def __init__(self, parent=None): super(UiObject, self).__init__(parent) self.W_t = uic.loadUi('W_t.ui') #常驻的顶窗体 self. to_do_t(self.W_t) # 初始化 self.W_0 = uic.loadUi('W_0.ui') # 常驻的左窗体 self.to_do_0(self.W_0) # 初始化 self.W_b = uic.loadUi('w_b.ui') # 启动以后展示的背景画面窗体 self.to_do_b(self.W_b) # 初始化 self.W_1 = uic.loadUi('W_1.ui') # 工作窗体1 self.to_do_1(self.W_1) # 初始化 self.W_2 = uic.loadUi('W_2.ui') # 工作窗体2 self.to_do_2(self.W_2) # 初始化 self.W_3 = uic.loadUi('W_3.ui') # 工作窗体3 self.to_do_3(self.W_3) # 初始化 self.W_4 = uic.loadUi('W_4.ui') # 工作窗体4 self.to_do_4(self.W_4) # 初始化 self.W_5 = uic.loadUi('W_5.ui') # 工作窗体5 self.to_do_5(self.W_5) # 初始化 self.forms = [self.W_t, self.W_0, self.W_1, self.W_2, self.W_3, self.W_4, self.W_5, self.W_b] self.connections() # 信号的连接 def connections(self): # 切换画面按钮的连接 self.W_0.btnw1.clicked.connect(self.show_W1) self.W_0.btnw2.clicked.connect(self.show_W2) self.W_0.btnw3.clicked.connect(self.show_W3) self.W_0.btnw4.clicked.connect(self.show_W4) self.W_0.btnw5.clicked.connect(self.show_W5) self.W_0.btn_quit.clicked.connect(self.close_all) def to_do_t(self, in_form): # 顶窗体初始化 in_form.setWindowFlags(Qt.FramelessWindowHint) # 关掉边框 in_form.move(180, 0) # 定位窗体在屏幕的位置 def to_do_b(self, in_form): # 背景窗体初始化 in_form.setWindowFlags(Qt.FramelessWindowHint) # 关掉边框 in_form.move(180, 80) # 定位窗体在屏幕的位置 def to_do_0(self, in_form): # 左窗体初始化 in_form.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) # 关掉边框,始终最前 in_form.move(0, 0) # 定位窗体在屏幕的位置 def to_do_1(self, in_form): # 1号工作窗体初始化 in_form.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) # 关掉边框,始终最前 in_form.move(180, 80) # 定位窗体在屏幕的位置 def to_do_2(self, in_form): # 2号工作窗体初始化 in_form.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) # 关掉边框,始终最前 in_form.move(180, 80) # 定位窗体在屏幕的位置 def to_do_3(self, in_form): # 3号工作窗体初始化 in_form.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) # 关掉边框,始终最前 in_form.move(180, 80) # 定位窗体在屏幕的位置 def to_do_4(self, in_form): # 4号工作窗体初始化 in_form.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) # 关掉边框,始终最前 in_form.move(180, 80) # 定位窗体在屏幕的位置 def to_do_5(self, in_form): # 4号工作窗体初始化 in_form.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) # 关掉边框,始终最前 in_form.move(180, 80) # 定位窗体在屏幕的位置 def show_W1(self): # 显示工作窗口1 # print('1') self.toggle_windows(1) def show_W2(self): # 显示工作窗口2 self.toggle_windows(2) def show_W3(self): # 显示工作窗口3 self.toggle_windows(3) def show_W4(self): # 显示工作窗口4 self.toggle_windows(4) def show_W5(self): # 显示工作窗口4 self.toggle_windows(5) def close_all(self): # 关闭所有窗口,包括主窗口 self.toggle_windows(0) def toggle_windows(self, n): # 切换各个窗口的显示和隐藏 i = 1 # n = n if n == 0: for wd in self. forms: wd.close() # 关闭所有窗口 else: # self. forms[n].showMaximized() # 显示指定的窗口 self.forms[n+1].show() for wd in self. forms[2:]: # 对所有的窗口实体进行操作 if i != n: # wd.showMinimized() # 关闭其他窗口 wd.hide() i += 1 if __name__ == '__main__': app = QApplication(sys.argv) ui = UiObject() # object的本地实体化 ui.W_0.show() # 显示左窗体 ui.W_t.show() # 显示顶窗体 ui.W_b.show() # 显示背景窗体 sys.exit(app.exec_()) 实际运行效果:
资源下载: https://download.csdn.net/download/xulibo5828/87546480