pyqt5登录界面设计

您所在的位置:网站首页 qq登录界面android代码 pyqt5登录界面设计

pyqt5登录界面设计

2023-08-15 15:48| 来源: 网络整理| 查看: 265

'''**************************************************************************

版本:1.0内容:登录注册按钮时间:2022.5.29作者:狄云

创建一个新的数据库 create database test_0529;

使用test_0505数据库 use test_0529;

创建一个userinfo表 create table userinfo (id int auto_increment primary key,name varchar(10) not null, pwd varchar(18) not null );

查看表结构是否正确desc userinfo;

查看数据 select * from userinfo;

然后进去,注册,返回登录,登录

***************************************************************************'''

import pymysqlfrom PyQt5.QtCore import Qt, pyqtSignal, QPointfrom PyQt5.QtGui import QFont, QEnterEvent, QPainter, QColor, QPenfrom PyQt5.QtWidgets import QHBoxLayout, QLabel,QSpacerItem, QSizePolicyfrom PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QTextEditfrom PyQt5 import QtGuiimport sys

from PyQt5.QtCore import QSizefrom PyQt5.QtWidgets import QApplicationfrom PyQt5.QtCore import Qtfrom PyQt5.QtWidgets import QComboBoxfrom PyQt5.QtWidgets import QGridLayoutfrom PyQt5.QtWidgets import QLineEditfrom PyQt5.QtWidgets import QLabelfrom PyQt5.QtGui import QIconfrom PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QTextEditfrom PyQt5 import QtWidgetsfrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5 import QtGuifrom PyQt5.QtGui import QFont

StyleSheet = """/*最小化最大化关闭按钮通用默认背景*/#buttonMinimum,#buttonMaximum,#buttonClose { border: none;}#buttonClose,#buttonMaximum,#buttonMinimum{ color:grey;}/*悬停*/#buttonMinimum:hover,#buttonMaximum:hover { color: white;}#buttonClose:hover { color: white;}/*鼠标按下不放*/#buttonMinimum:pressed,#buttonMaximum:pressed { color:grey;}#buttonClose:pressed { color: white;

}"""class TitleBar(QWidget):

# 窗口最小化信号 windowMinimumed = pyqtSignal() # 窗口最大化信号 windowMaximumed = pyqtSignal() # 窗口还原信号 windowNormaled = pyqtSignal() # 窗口关闭信号 windowClosed = pyqtSignal()

# 窗口移动 windowMoved = pyqtSignal(QPoint)

def __init__(self, *args, **kwargs): super(TitleBar, self).__init__(*args, **kwargs) self.setStyleSheet(StyleSheet) self.mPos = None self.iconSize = 20 # 图标的默认大小

# 布局 layout = QHBoxLayout(self, spacing=0) layout.setContentsMargins(0, 0, 0, 0) # 窗口图标 self.iconLabel = QLabel(self)# self.iconLabel.setScaledContents(True) layout.addWidget(self.iconLabel) # 窗口标题 self.titleLabel = QLabel(self) self.titleLabel.setStyleSheet("color:grey") self.titleLabel.setMargin(2) layout.addWidget(self.titleLabel) # 中间伸缩条 layout.addSpacerItem(QSpacerItem( 40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)) # 利用Webdings字体来显示图标 font = self.font() or QFont() font.setFamily('Webdings') # 最小化按钮 self.buttonMinimum = QPushButton( '0', self, clicked=self.windowMinimumed.emit, font=font, objectName='buttonMinimum') layout.addWidget(self.buttonMinimum) # 最大化/还原按钮 self.buttonMaximum = QPushButton( '1', self, clicked=self.showMaximized, font=font, objectName='buttonMaximum') layout.addWidget(self.buttonMaximum) # 关闭按钮 self.buttonClose = QPushButton( 'r', self, clicked=self.windowClosed.emit, font=font, objectName='buttonClose') layout.addWidget(self.buttonClose) # 初始高度 self.setHeight()

def showMaximized(self): if self.buttonMaximum.text() == '1': # 最大化 self.buttonMaximum.setText('2') self.windowMaximumed.emit() else: # 还原 self.buttonMaximum.setText('1') self.windowNormaled.emit()

def setHeight(self, height=38): """设置标题栏高度""" self.setMinimumHeight(height) self.setMaximumHeight(height) # 设置右边按钮的大小 self.buttonMinimum.setMinimumSize(height, height) self.buttonMinimum.setMaximumSize(height, height) self.buttonMaximum.setMinimumSize(height, height) self.buttonMaximum.setMaximumSize(height, height) self.buttonClose.setMinimumSize(height, height) self.buttonClose.setMaximumSize(height, height)

def setTitle(self, title): """设置标题""" self.titleLabel.setText(title)

def setIcon(self, icon): """设置图标""" self.iconLabel.setPixmap(icon.pixmap(self.iconSize, self.iconSize))

def setIconSize(self, size): """设置图标大小""" self.iconSize = size

def enterEvent(self, event): self.setCursor(Qt.ArrowCursor) super(TitleBar, self).enterEvent(event)

def mouseDoubleClickEvent(self, event): super(TitleBar, self).mouseDoubleClickEvent(event) self.showMaximized()

def mousePressEvent(self, event): """鼠标点击事件""" if event.button() == Qt.LeftButton: self.mPos = event.pos() event.accept()

def mouseReleaseEvent(self, event): '''鼠标弹起事件''' self.mPos = None event.accept()

def mouseMoveEvent(self, event): if event.buttons() == Qt.LeftButton and self.mPos: self.windowMoved.emit(self.mapToGlobal(event.pos() - self.mPos)) event.accept()

# 枚举左上右下以及四个定点Left, Top, Right, Bottom, LeftTop, RightTop, LeftBottom, RightBottom = range(8)

class FramelessWindow(QWidget):

# 四周边距 Margins = 5

def __init__(self, *args, **kwargs): super(FramelessWindow, self).__init__(*args, **kwargs) palette1 = QtGui.QPalette() palette1.setBrush(self.backgroundRole(), QtGui.QBrush( QtGui.QPixmap('./input/log0.jpg'))) # 设置登录背景图片 self.setPalette(palette1) self.setAutoFillBackground(True) self.setGeometry(300, 300, 250, 150) self._pressed = False self.Direction = None # 无边框 self.setWindowFlags(Qt.FramelessWindowHint) # 隐藏边框 # 鼠标跟踪 self.setMouseTracking(True) # 布局 layout = QVBoxLayout(self, spacing=0) layout.setContentsMargins(0,0,0,0) # 标题栏 self.titleBar = TitleBar(self) layout.addWidget(self.titleBar) # 信号槽 self.titleBar.windowMinimumed.connect(self.showMinimized) self.titleBar.windowMaximumed.connect(self.showMaximized) self.titleBar.windowNormaled.connect(self.showNormal) self.titleBar.windowClosed.connect(self.close) self.titleBar.windowMoved.connect(self.move) self.windowTitleChanged.connect(self.titleBar.setTitle) self.windowIconChanged.connect(self.titleBar.setIcon)

#def setTitleBarHeight(self, height=38): def setTitleBarHeight(self, height=50): """设置标题栏高度""" self.titleBar.setHeight(height)

def setIconSize(self, size): """设置图标的大小""" self.titleBar.setIconSize(size)

def setWidget(self, widget): """设置自己的控件""" if hasattr(self, '_widget'): return self._widget = widget # 设置默认背景颜色,否则由于受到父窗口的影响导致透明 self._widget.setAutoFillBackground(True) self._widget.installEventFilter(self) self.layout().addWidget(self._widget)

def move(self, pos): if self.windowState() == Qt.WindowMaximized or self.windowState() == Qt.WindowFullScreen: # 最大化或者全屏则不允许移动 return super(FramelessWindow, self).move(pos)

def showMaximized(self): """最大化,要去除上下左右边界,如果不去除则边框地方会有空隙""" super(FramelessWindow, self).showMaximized() self.layout().setContentsMargins(0, 0, 0, 0)

def showNormal(self): """还原,要保留上下左右边界,否则没有边框无法调整""" super(FramelessWindow, self).showNormal() self.layout().setContentsMargins(0, 0, 0, 0)

def eventFilter(self, obj, event): """事件过滤器,用于解决鼠标进入其它控件后还原为标准鼠标样式""" if isinstance(event, QEnterEvent): self.setCursor(Qt.ArrowCursor) return super(FramelessWindow, self).eventFilter(obj, event)

def paintEvent(self, event): """由于是全透明背景窗口,重绘事件中绘制透明度为1的难以发现的边框,用于调整窗口大小""" super(FramelessWindow, self).paintEvent(event) painter = QPainter(self) painter.setPen(QPen(QColor(255, 255, 255, 1), 2 * self.Margins)) painter.drawRect(self.rect())

def mousePressEvent(self, event): """鼠标点击事件""" super(FramelessWindow, self).mousePressEvent(event) if event.button() == Qt.LeftButton: self._mpos = event.pos() self._pressed = True

def mouseReleaseEvent(self, event): '''鼠标弹起事件''' super(FramelessWindow, self).mouseReleaseEvent(event) self._pressed = False self.Direction = None

def mouseMoveEvent(self, event): """鼠标移动事件""" super(FramelessWindow, self).mouseMoveEvent(event) pos = event.pos() xPos, yPos = pos.x(), pos.y() wm, hm = self.width() - self.Margins, self.height() - self.Margins if self.isMaximized() or self.isFullScreen(): self.Direction = None self.setCursor(Qt.ArrowCursor) return if event.buttons() == Qt.LeftButton and self._pressed: self._resizeWidget(pos) return if xPos



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3