小脚手架(后续随缘优化)
UI还待优化
初学QT,自己想做一个工具,先搭建界面玩玩
实现了界面的基本功能,绑定事件,窗口移动,放大缩小,最小化
后续布局再做微调
代码包
代码
import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtCore import Qt, QPropertyAnimation, QRect, QEasingCurve
from PyQt5.QtGui import QColor, QPainter, QLinearGradient, QPalette
from PyQt5.QtWidgets import QMainWindow, QApplication, QDesktopWidget
from main1017 import Ui_MainWindow
class MyMainForm(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
self.start_x = None
self.start_y = None
self.anim=None
self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
self.setWindowFlags(Qt.FramelessWindowHint) # 设置窗口标志:隐藏窗口边框
self.btn_img.clicked.connect(self.choose_img)
# Bind button scale up and scale down
self.btn_max.clicked.connect(self.btn_max_click)
self.btn_min.clicked.connect(self.minimize)
self.btn_stop.clicked.connect(self.closeEvent)
# Window scale up and scale down
def btn_max_click(self):
if self.isMaximized():
self.showNormal()
# self.btn_stop.setText('放大窗口')
else:
self.showMaximized()
# self.btn_stop.setText('缩小窗口')
# 重写 closeEvent 函数,关闭窗口并停止程序运行
def closeEvent(self, event):
sys.exit()
# 最小化窗口
def minimize(self):
self.showMinimized()
# 鼠标左键释放时被触发
def mouseReleaseEvent(self, event):
self.start_x = None
self.start_y = None
# 在鼠标左键按下时被触发
def mousePressEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
super(MyMainForm, self).mousePressEvent(event)
self.start_x = event.x()
self.start_y = event.y()
# 在鼠标移动时被触发
def mouseMoveEvent(self, event):
try:
super(MyMainForm, self).mouseMoveEvent(event)
dis_x = event.x() - self.start_x
dis_y = event.y() - self.start_y
self.move(self.x() + dis_x, self.y() + dis_y)
except:
pass
# 窗口设置阴影效果
def effect_shadow_style(self, widget):
effect_shadow = QtWidgets.QGraphicsDropShadowEffect(self)
effect_shadow.setOffset(12, 12) # 偏移
effect_shadow.setBlurRadius(128) # 阴影半径
effect_shadow.setColor(QColor(155, 230, 237, 150)) # 阴影颜色
widget.setGraphicsEffect(effect_shadow)
def choose_img(self):
self.plainTextEdit.appendPlainText('点击了添加图片')
# 背景渐变
# def paintEvent(self, event):
# painter = QPainter(self)
# gradient = QLinearGradient(0, 0, self.width(), self.height())
# gradient.setColorAt(0, QColor(89, 217, 212, 128))
# gradient.setColorAt(1, QColor(104, 202, 237, 128))
# gradient.setStart(0, 0)
# gradient.setFinalStop(self.width(), self.height())
# painter.setBrush(gradient)
# painter.drawRect(self.rect())
#
if __name__ == "__main__":
app = QApplication(sys.argv)
myWin = MyMainForm()
myWin.show()
# myWin.btn_img.clicked.connect(click())
sys.exit(app.exec_())
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'main1017.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# 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(995, 675)
MainWindow.setStyleSheet("QScrollBar:horizontal{\n"
" height:8px;\n"
" background:rgba(0,0,0,0%);\n"
"border-radius:4px;\n"
"\n"
"}\n"
"QScrollBar::handle:horizontal{\n"
" background:rgba(125,125,125,50%);\n"
"border-radius:4px;\n"
"}\n"
"QScrollBar::handle:horizontal:hover{\n"
" background:rgba(125,125,125,100%);\n"
" min-width:0;\n"
"}\n"
"QScrollBar::add-line:horizontal{\n"
" height:0px;width:0px;\n"
"\n"
"}\n"
"QScrollBar::sub-line:horizontal{\n"
" height:0px;width:0px;\n"
"\n"
"}\n"
"QScrollBar::add-line:horizontal:hover{\n"
" height:0px;width:0px;\n"
"\n"
"}\n"
"QScrollBar::sub-line:horizontal:hover{\n"
" height:0px;width:0px;\n"
"\n"
"}\n"
"QScrollBar::add-page:horizontal,QScrollBar::sub-page:horizontal\n"
"{\n"
" background:rgba(0,0,0,10%);\n"
" border-radius:4px;\n"
"}\n"
"\n"
"QScrollBar:vertical{\n"
" width:8px;\n"
" background:rgba(0,0,0,0%);\n"
"\n"
"}\n"
"QScrollBar::handle:vertical{\n"
" width:0px;\n"
" background:rgba(125,125,125,50%);\n"
" border-radius:4px;\n"
"}\n"
"QScrollBar::handle:vertical:hover{\n"
" width:0px;\n"
" background:rgba(125,125,125,100%);\n"
" border-radius:4px;\n"
" min-width:20;\n"
"}\n"
"QScrollBar::add-line:vertical{\n"
" height:0px;width:0px;\n"
"\n"
"}\n"
"QScrollBar::sub-line:vertical{\n"
" height:0px;width:0px;\n"
"\n"
"}\n"
"QScrollBar::add-line:vertical:hover{\n"
" height:0px;width:0px;\n"
"\n"
"}\n"
"QScrollBar::sub-line:vertical:hover{\n"
" height:0px;width:0px;\n"
"\n"
"}\n"
"QScrollBar::add-page:vertical,QScrollBar::sub-page:vertical\n"
"{\n"
" background:rgba(0,0,0,10%);\n"
" border-radius:4px;\n"
"}\n"
"")
self.main = QtWidgets.QWidget(MainWindow)
self.main.setObjectName("main")
self.horizontalLayout_8 = QtWidgets.QHBoxLayout(self.main)
self.horizontalLayout_8.setObjectName("horizontalLayout_8")
self.mainmain = QtWidgets.QFrame(self.main)
self.mainmain.setStyleSheet("QFrame#frame{\n"
" background-color: rgba(255, 255, 255, 150);\n"
" border-radius:20px;\n"
"}")
self.mainmain.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.mainmain.setFrameShadow(QtWidgets.QFrame.Raised)
self.mainmain.setObjectName("mainmain")
self.horizontalLayout_7 = QtWidgets.QHBoxLayout(self.mainmain)
self.horizontalLayout_7.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_7.setSpacing(12)
self.horizontalLayout_7.setObjectName("horizontalLayout_7")
self.chuizhi = QtWidgets.QVBoxLayout()
self.chuizhi.setSpacing(12)
self.chuizhi.setObjectName("chuizhi")
self.frame_3 = QtWidgets.QFrame(self.mainmain)
self.frame_3.setStyleSheet(".QFrame{\n"
" background-color: rgba(205,254,249, 0.95);\n"
" border-radius:20px;\n"
"}")
self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_3.setObjectName("frame_3")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.frame_3)
self.verticalLayout_3.setContentsMargins(10, 11, 4, 11)
self.verticalLayout_3.setSpacing(0)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.windowRight = QtWidgets.QHBoxLayout()
self.windowRight.setSizeConstraint(QtWidgets.QLayout.SetFixedSize)
self.windowRight.setContentsMargins(0, 0, 0, 0)
self.windowRight.setSpacing(10)
self.windowRight.setObjectName("windowRight")
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.windowRight.addItem(spacerItem)
self.btn_min = QtWidgets.QPushButton(self.frame_3)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.btn_min.sizePolicy().hasHeightForWidth())
self.btn_min.setSizePolicy(sizePolicy)
self.btn_min.setMaximumSize(QtCore.QSize(20, 20))
self.btn_min.setStyleSheet("QPushButton {\n"
" background-color: #07BB2C;\n"
" border: 2px solid #07BB2C;\n"
" color: #3498db;\n"
" padding: 1px;\n"
" border-radius: 10px;\n"
"}\n"
" \n"
"QPushButton:hover {\n"
" background-color: #09ED3A;\n"
" color: #ffffff;\n"
"}")
self.btn_min.setText("")
self.btn_min.setObjectName("btn_min")
self.windowRight.addWidget(self.btn_min)
self.btn_max = QtWidgets.QPushButton(self.frame_3)
self.btn_max.setMaximumSize(QtCore.QSize(20, 20))
self.btn_max.setStyleSheet("QPushButton {\n"
" background-color: #FFB206;\n"
" border: 2px solid #FFB206;\n"
" color: #3498db;\n"
" padding: 1px;\n"
" border-radius: 10px;\n"
"}\n"
" \n"
"QPushButton:hover {\n"
" background-color: #FFC033;\n"
" color: #ffffff;\n"
"}")
self.btn_max.setText("")
self.btn_max.setObjectName("btn_max")
self.windowRight.addWidget(self.btn_max)
self.btn_stop = QtWidgets.QPushButton(self.frame_3)
self.btn_stop.setMaximumSize(QtCore.QSize(20, 20))
self.btn_stop.setStyleSheet("\n"
"\n"
"QPushButton {\n"
" background-color: #EE514A;\n"
" border: 2px solid #EE514A;\n"
" color: #3498db;\n"
" padding: 1px;\n"
" border-radius: 10px;\n"
"}\n"
" \n"
"QPushButton:hover {\n"
" background-color: #F1756F;\n"
" color: #ffffff;\n"
"}")
self.btn_stop.setText("")
self.btn_stop.setObjectName("btn_stop")
self.windowRight.addWidget(self.btn_stop)
self.verticalLayout_3.addLayout(self.windowRight)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.frame_4 = QtWidgets.QFrame(self.frame_3)
self.frame_4.setStyleSheet(".QFrame{\n"
" background-color: rgba(255, 255, 255, 0);\n"
" border-radius:20px;\n"
"}")
self.frame_4.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_4.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_4.setObjectName("frame_4")
self.horizontalLayout_13 = QtWidgets.QHBoxLayout(self.frame_4)
self.horizontalLayout_13.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_13.setObjectName("horizontalLayout_13")
self.frame_2 = QtWidgets.QFrame(self.frame_4)
self.frame_2.setMaximumSize(QtCore.QSize(200, 1000))
self.frame_2.setStyleSheet("QFrame#frame_2{\n"
" background-color: rgba(255, 255, 255, 255);\n"
" border-radius:20px;\n"
"}")
self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_2.setObjectName("frame_2")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.frame_2)
self.verticalLayout_2.setContentsMargins(-1, -1, -1, 36)
self.verticalLayout_2.setSpacing(2)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.frame_5 = QtWidgets.QFrame(self.frame_2)
self.frame_5.setStyleSheet("border:none")
self.frame_5.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_5.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_5.setObjectName("frame_5")
self.horizontalLayout_6 = QtWidgets.QHBoxLayout(self.frame_5)
self.horizontalLayout_6.setContentsMargins(-1, 24, -1, -1)
self.horizontalLayout_6.setObjectName("horizontalLayout_6")
self.widget_6 = QtWidgets.QWidget(self.frame_5)
self.widget_6.setEnabled(True)
self.widget_6.setMinimumSize(QtCore.QSize(65, 65))
self.widget_6.setMaximumSize(QtCore.QSize(65, 65))
self.widget_6.setMouseTracking(False)
self.widget_6.setTabletTracking(False)
self.widget_6.setAcceptDrops(False)
self.widget_6.setWhatsThis("")
self.widget_6.setAutoFillBackground(False)
self.widget_6.setStyleSheet("border-radius:32px;\n"
"background-color: rgb(85, 255, 255);\n"
"\n"
"background-image: url(:/svg/img/svg/对号1 (1).png);")
self.widget_6.setInputMethodHints(QtCore.Qt.ImhNone)
self.widget_6.setObjectName("widget_6")
self.horizontalLayout_6.addWidget(self.widget_6)
self.verticalLayout_2.addWidget(self.frame_5)
self.label = QtWidgets.QLabel(self.frame_2)
font = QtGui.QFont()
font.setPointSize(16)
font.setBold(True)
font.setWeight(75)
self.label.setFont(font)
self.label.setStyleSheet("color: rgb(22, 54, 53)")
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.verticalLayout_2.addWidget(self.label)
self.frame_6 = QtWidgets.QFrame(self.frame_2)
self.frame_6.setStyleSheet("QFrame{\n"
" \n"
"background: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(36,210,240,1), stop:1 rgba(43,212,193,1));\n"
"\n"
" border-radius:10px;\n"
" margin-top: 10px;\n"
" margin-bottom: 20px;\n"
"\n"
"}\n"
"\n"
"")
self.frame_6.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_6.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_6.setObjectName("frame_6")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.frame_6)
self.horizontalLayout.setSpacing(8)
self.horizontalLayout.setObjectName("horizontalLayout")
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setSpacing(0)
self.verticalLayout.setObjectName("verticalLayout")
self.btn_img = QtWidgets.QPushButton(self.frame_6)
self.btn_img.setStyleSheet("QPushButton {\n"
" color: #ffffff;\n"
" background-color: transparent;\n"
" font: 75 9pt \"江城斜宋体 700W\";\n"
"}\n"
" \n"
"QPushButton:hover {\n"
" color: #000000;\n"
" background-color: transparent;\n"
"}")
self.btn_img.setObjectName("btn_img")
self.verticalLayout.addWidget(self.btn_img)
self.btn_option = QtWidgets.QPushButton(self.frame_6)
self.btn_option.setStyleSheet("QPushButton {\n"
" color: #ffffff;\n"
" background-color: transparent;\n"
" font: 75 9pt \"江城斜宋体 700W\";\n"
"}\n"
" \n"
"QPushButton:hover {\n"
" color: #000000;\n"
" background-color: transparent;\n"
"}")
self.btn_option.setObjectName("btn_option")
self.verticalLayout.addWidget(self.btn_option)
self.btn_time = QtWidgets.QPushButton(self.frame_6)
self.btn_time.setStyleSheet("QPushButton {\n"
" color: #ffffff;\n"
" background-color: transparent;\n"
" font: 75 9pt \"江城斜宋体 700W\";\n"
"}\n"
" \n"
"QPushButton:hover {\n"
" color: #000000;\n"
" background-color: transparent;\n"
"}")
self.btn_time.setObjectName("btn_time")
self.verticalLayout.addWidget(self.btn_time)
self.btn_version = QtWidgets.QPushButton(self.frame_6)
self.btn_version.setStyleSheet("QPushButton {\n"
" color: #ffffff;\n"
" background-color: transparent;\n"
" font: 75 9pt \"江城斜宋体 700W\";\n"
"}\n"
" \n"
"QPushButton:hover {\n"
" color: #000000;\n"
" background-color: transparent;\n"
"}")
self.btn_version.setObjectName("btn_version")
self.verticalLayout.addWidget(self.btn_version)
self.horizontalLayout.addLayout(self.verticalLayout)
self.verticalLayout_2.addWidget(self.frame_6)
self.plainTextEdit = QtWidgets.QPlainTextEdit(self.frame_2)
self.plainTextEdit.setMaximumSize(QtCore.QSize(50000, 3000))
self.plainTextEdit.setStyleSheet("background: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(170,219,255,1), stop:1 rgba(19,157,255,1));\n"
"\n"
" border-radius:10px;\n"
"\n"
" margin-top: 10px;\n"
" margin-bottom: 20px;\n"
"\n"
"")
self.plainTextEdit.setObjectName("plainTextEdit")
self.verticalLayout_2.addWidget(self.plainTextEdit)
self.verticalLayout_2.setStretch(2, 1)
self.horizontalLayout_13.addWidget(self.frame_2)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_13.addItem(spacerItem1)
self.horizontalLayout_2.addWidget(self.frame_4)
self.verticalLayout_3.addLayout(self.horizontalLayout_2)
self.chuizhi.addWidget(self.frame_3)
self.horizontalLayout_7.addLayout(self.chuizhi)
self.horizontalLayout_8.addWidget(self.mainmain)
MainWindow.setCentralWidget(self.main)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "工具窗口"))
self.btn_img.setText(_translate("MainWindow", "添加图片"))
self.btn_option.setText(_translate("MainWindow", "配置操作"))
self.btn_time.setText(_translate("MainWindow", "循环次数"))
self.btn_version.setText(_translate("MainWindow", "版本信息"))
self.plainTextEdit.setPlainText(_translate("MainWindow", "欢迎使用wx-快捷工具!"))
import resources_rc