2018-07-07 15:15:12 +08:00
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
主函数.
|
|
|
|
|
|
|
|
|
|
description: pyqt5悬浮下拉菜单
|
|
|
|
|
|
|
|
|
|
Created on 2018年7月7日
|
|
|
|
|
|
2018-09-09 23:26:15 +08:00
|
|
|
|
Author: 人间白头
|
|
|
|
|
|
2018-07-07 15:15:12 +08:00
|
|
|
|
email: 625781186@qq.com
|
|
|
|
|
"""
|
|
|
|
|
|
2018-09-09 23:26:15 +08:00
|
|
|
|
import sys
|
2018-07-07 15:15:12 +08:00
|
|
|
|
|
|
|
|
|
from PyQt5 import QtGui, QtWidgets, QtCore
|
|
|
|
|
from PyQt5.QtCore import *
|
|
|
|
|
from PyQt5.QtGui import *
|
|
|
|
|
from PyQt5.QtWidgets import *
|
|
|
|
|
|
2018-09-09 23:26:15 +08:00
|
|
|
|
from U_FuncWidget.Menu import *
|
2018-07-07 15:15:12 +08:00
|
|
|
|
from Ui_Main import Ui_MainWindow
|
|
|
|
|
|
2018-09-09 23:26:15 +08:00
|
|
|
|
from Tools.CommonHelper import CommonHelper #读取CSS用
|
|
|
|
|
from Tools.qmf_showError import w_showERROR #弹窗报错
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class MainWindow(Ui_MainWindow, QMainWindow):
|
2018-07-07 15:15:12 +08:00
|
|
|
|
"""
|
2018-09-09 23:26:15 +08:00
|
|
|
|
主窗口.
|
2018-07-07 15:15:12 +08:00
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
def __init__(self, parent=None):
|
|
|
|
|
"""
|
2018-09-09 23:26:15 +08:00
|
|
|
|
|
2018-07-07 15:15:12 +08:00
|
|
|
|
"""
|
|
|
|
|
super(MainWindow, self).__init__(parent)
|
|
|
|
|
self.setupUi(self)
|
2018-09-09 23:26:15 +08:00
|
|
|
|
|
|
|
|
|
# 用于存储界面是否需要删除,
|
|
|
|
|
# 目前只支持9个菜单按钮。
|
|
|
|
|
self.Wid_Obj={
|
|
|
|
|
"b1":{}, "b2":{}, "b3":{}, "b4":{}, "b5":{},
|
|
|
|
|
"b6":{}, "b7":{}, "b8":{}, "b9":{},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
self.__initUI()
|
|
|
|
|
|
|
|
|
|
def __initUI(self):
|
|
|
|
|
'''
|
|
|
|
|
一些无法在基础元素累中初始化的参数。
|
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
# 有用判断最长的label的长度
|
|
|
|
|
label_width = 0
|
|
|
|
|
|
|
|
|
|
self.label_list = []
|
|
|
|
|
|
|
|
|
|
# 从上部分窗体的子对象中循环选取出self.WX
|
|
|
|
|
for WX in self.topWidget.children():
|
|
|
|
|
# 判断是不是WX窗体
|
|
|
|
|
name = WX.objectName()[0]
|
|
|
|
|
if name =="W" and isinstance(WX, SingeleWidget):
|
|
|
|
|
num = WX.objectName()[1]
|
|
|
|
|
# 从全局中取 LX类
|
|
|
|
|
LX = globals()["L%s"%num]
|
|
|
|
|
del WX.m_menu
|
|
|
|
|
WX.m_menu = LX(self)
|
2018-07-07 15:15:12 +08:00
|
|
|
|
|
2018-09-09 23:26:15 +08:00
|
|
|
|
label = WX.findChild(QLabel)
|
|
|
|
|
self.label_list.append(label)
|
|
|
|
|
|
|
|
|
|
# 判断文字最长的label
|
|
|
|
|
if label_width < len(label.text()):
|
|
|
|
|
label_width = len(label.text())
|
|
|
|
|
|
|
|
|
|
# 用空格填充label, 使其宽度统一
|
|
|
|
|
for label in self.label_list:
|
|
|
|
|
|
|
|
|
|
length = label_width - len(label.text())
|
|
|
|
|
size = length
|
|
|
|
|
text = label.text()
|
|
|
|
|
|
|
|
|
|
if length%2:
|
|
|
|
|
text = ' '+ text +' '
|
|
|
|
|
text = ' '*size+ text +' '*size
|
|
|
|
|
label.setText(text)
|
|
|
|
|
|
|
|
|
|
self.readCSS(self)
|
|
|
|
|
|
|
|
|
|
self.DEFAULT = {}
|
|
|
|
|
self.animation = QPropertyAnimation(self.topWidget, b'maximumHeight' )
|
|
|
|
|
self.toggleButton.clicked.connect(self.start_animation)
|
2018-07-07 15:15:12 +08:00
|
|
|
|
|
2018-09-09 23:26:15 +08:00
|
|
|
|
def readCSS(self, obj):
|
|
|
|
|
'''
|
|
|
|
|
用于设置样式,SingeleWidget类中也需要用到。
|
|
|
|
|
'''
|
|
|
|
|
styleFile = './Tools/style.css'
|
|
|
|
|
qssStyle = CommonHelper.readQss( styleFile )
|
|
|
|
|
obj.setStyleSheet( qssStyle )
|
|
|
|
|
|
|
|
|
|
def start_animation(self, checked):
|
|
|
|
|
|
|
|
|
|
CurrentHeight = self.topWidget.height()
|
|
|
|
|
if self.DEFAULT == {}:
|
|
|
|
|
self.DEFAULT["len"] = CurrentHeight
|
|
|
|
|
if CurrentHeight == 0:
|
|
|
|
|
direction = QAbstractAnimation.Backward
|
|
|
|
|
self.toggleButton.setText("↑")
|
|
|
|
|
else:
|
|
|
|
|
direction = QAbstractAnimation.Forward
|
|
|
|
|
self.toggleButton.setText("↓")
|
|
|
|
|
self.animation.setDirection(direction)
|
|
|
|
|
self.animation.setDuration(150)
|
|
|
|
|
self.animation.setStartValue(self.DEFAULT["len"])
|
|
|
|
|
self.animation.setEndValue(0)
|
|
|
|
|
self.animation.start()
|
|
|
|
|
|
|
|
|
|
# def enterEvent(self, e):
|
|
|
|
|
# '''自定义标题栏需要重置光标。'''
|
|
|
|
|
# self.setCursor(Qt.ArrowCursor)
|
|
|
|
|
|
2018-07-07 15:15:12 +08:00
|
|
|
|
if __name__ == "__main__":
|
2018-09-09 23:26:15 +08:00
|
|
|
|
|
2018-07-07 15:15:12 +08:00
|
|
|
|
app = QtWidgets.QApplication(sys.argv)
|
|
|
|
|
|
|
|
|
|
ui = MainWindow()
|
2018-09-09 23:26:15 +08:00
|
|
|
|
|
|
|
|
|
# import qdarkstyle
|
|
|
|
|
# app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
|
|
|
|
|
|
|
|
|
|
ui.show()
|
|
|
|
|
|
2018-07-07 15:15:12 +08:00
|
|
|
|
sys.exit(app.exec_())
|