def __init__(self, parent=None): super(LoginWindow, self).__init__() self.setWindowFlags(Qt.FramelessWindowHint) self.parent = parent self.userService = self.parent.userService self.resize(600, 360) self.setObjectName("LoginWindow") self.mainLayout = VBoxLayout(self) self.header = Header("登录", self) self.header.setMinimumHeight(30) self.user_label = QLabel("用户名") self.user_label.setObjectName("UserName") self.user_label.setMaximumHeight(27) self.txt_user = InputLine(self, 220, 32, "请输入用户名") self.txt_user.setObjectName("txt_user") self.txt_user.setText("生命练习生") self.pwd_label = QLabel("密码") self.pwd_label.setObjectName("Password") self.pwd_label.setMaximumHeight(27) self.txt_pwd = InputLine(self, 220, 32, "请输入密码") self.txt_pwd.resize(280, 40) self.txt_pwd.setObjectName("txt_pwd") self.txt_pwd.setEchoMode(QLineEdit.Password) self.txt_pwd.setText("123") self.btn_login = QPushButton() self.btn_login.setObjectName("btn_login") self.btn_login.setText("登录") self.btn_login.clicked.connect(self.login) self.btn_register = QPushButton() self.btn_register.setObjectName("btn_register") self.btn_register.setText("注册账号") self.setLayouts() with open('qss/Login_style.qss', 'r', encoding='utf-8') as f: self.setStyleSheet(f.read())
def setButtons(self): """创建所有的按钮。""" self.logoLabel = PicLabel(r'resource/header.png', 32, 32) self.descriptionLabel = QLabel(self) self.descriptionLabel.setText("<b>酌酒援北斗</b>") self.userName = QLabel(self) self.userName.setText("<b>" + self.parent.parent.user.user_name + "</b>") self.userPix = PicLabel(IMAGE_BASE + self.parent.parent.user.avatar, 32, 32) self.userPix.setMinimumSize(22, 22) self.userPix.setObjectName("userPix") self.closeButton = QPushButton('×', self) self.closeButton.setObjectName("closeButton") self.closeButton.setMinimumSize(21, 17) self.showminButton = QPushButton('-', self) self.showminButton.setObjectName("minButton") self.showminButton.setMinimumSize(21, 17) self.showmaxButton = QPushButton('□') self.showmaxButton.setObjectName("maxButton") self.showmaxButton.setMaximumSize(16, 16) self.loginButton = QPushButton("未登录 ▼", self) self.loginButton.setObjectName("loginButton") self.prevButton = QPushButton("<") self.prevButton.setObjectName("prevButton") self.prevButton.setMaximumSize(28, 22) self.prevButton.setMinimumSize(28, 22) self.nextButton = QPushButton(">") self.nextButton.setObjectName("nextButton") self.nextButton.setMaximumSize(28, 22) self.nextButton.setMinimumSize(28, 22)
def __init__(self, title: str, parent=None): super(Header, self).__init__() self.parent = parent self.setStyleSheet(self.myStyle) self.mainLayout = HBoxLayout(self) self.title = QLabel(title) self.mainLayout.addWidget(self.title) self.mainLayout.addStretch(1) self.closeButton = QPushButton('×') self.closeButton.clicked.connect(self.parent.close) self.mainLayout.addWidget(self.closeButton)
def setLabels(self): """定义所有的标签。""" self.userLabel = QLabel(" 用户管理") self.userLabel.setObjectName("userManagement") self.userLabel.setMaximumHeight(27) self.blogLabel = QLabel(" 博客管理") self.blogLabel.setObjectName("blogManagement") self.blogLabel.setMaximumHeight(27) # self.myMusic.setMaximumHeight(54) self.otherLabel = QLabel(" 其他...") self.otherLabel.setObjectName("otherLabel") self.otherLabel.setMaximumHeight(27)
class UserInfo(ScrollArea): def __init__(self, parent=None): super(UserInfo, self).__init__(self) self.setLabel() self.setLayouts() def setLabel(self): self.avatarLabel = QLabel() self.avatarLabel.setText("头像") self.avatarImage = PicLabel(width=100, height=100) self.avatarImage.setObjectName("avatarImage") self.avatarImage.doubleClick.connect(self.avatarClick) self.userNameLabel = QLabel() self.userNameLabel.setText("用户名") self.userNameText = InputLine(self, 300, 32) self.passwordLabel = QLabel() self.passwordLabel.setText("密码") self.passwordText = InputLine(self, 300, 32) self.nickNameLabel = QLabel() self.nickNameLabel.setText("昵称") self.nickNameText = InputLine(self, 300, 32) self.genderLabel = QLabel() self.genderLabel.setText("性别") self.boyRadio = QRadioButton('男') self.girlRadio = QRadioButton('女') self.emailLabel = QLabel() self.emailLabel.setText("邮箱") self.emailText = InputLine(self, 300, 32) self.phoneLabel = QLabel() self.phoneLabel.setText("手机") self.phoneText = InputLine(self, 300, 32) self.signLabel = QLabel() self.signLabel.setText("签名") self.signText = InputLine(self, 300, 32) def avatarClick(self): print('ccc') def setLayouts(self): middle = 20 height = 20 self.mainLayout = VBoxLayout() self.mainLayout.addSpacing(20) self.infoLayout = HBoxLayout() self.infoLayout.addStretch() self.labelLayout = VBoxLayout() self.labelLayout.addSpacing(42) self.labelLayout.addWidget(self.avatarLabel) self.labelLayout.addSpacing(52) self.labelLayout.addWidget(self.userNameLabel) self.labelLayout.addSpacing(height) self.labelLayout.addWidget(self.passwordLabel) self.labelLayout.addSpacing(height) self.labelLayout.addWidget(self.nickNameLabel) self.labelLayout.addSpacing(height) self.labelLayout.addWidget(self.genderLabel) self.labelLayout.addSpacing(height) self.labelLayout.addWidget(self.emailLabel) self.labelLayout.addSpacing(height) self.labelLayout.addWidget(self.phoneLabel) self.labelLayout.addSpacing(height) self.labelLayout.addWidget(self.signLabel) self.labelLayout.addSpacing(height) self.textLayout = VBoxLayout() self.imageLayout = HBoxLayout() self.imageLayout.addStretch() self.imageLayout.addWidget(self.avatarImage) self.imageLayout.addStretch() self.textLayout.addLayout(self.imageLayout) self.textLayout.addSpacing(height) self.textLayout.addWidget(self.userNameText) self.textLayout.addSpacing(height) self.textLayout.addWidget(self.passwordText) self.textLayout.addSpacing(height) self.textLayout.addWidget(self.nickNameText) self.textLayout.addSpacing(height) self.genderLayout = HBoxLayout() self.genderLayout.addWidget(self.boyRadio) self.genderLayout.addWidget(self.girlRadio) self.textLayout.addLayout(self.genderLayout) self.textLayout.addSpacing(height) self.textLayout.addWidget(self.emailText) self.textLayout.addSpacing(height) self.textLayout.addWidget(self.phoneText) self.textLayout.addSpacing(height) self.textLayout.addWidget(self.signText) self.textLayout.addSpacing(height) self.infoLayout.addLayout(self.labelLayout) self.infoLayout.addSpacing(middle) self.infoLayout.addLayout(self.textLayout) self.infoLayout.addStretch() self.mainLayout.addLayout(self.infoLayout)
def setLabel(self): self.avatarLabel = QLabel() self.avatarLabel.setText("头像") self.avatarImage = PicLabel(width=100, height=100) self.avatarImage.setObjectName("avatarImage") self.avatarImage.doubleClick.connect(self.avatarClick) self.userNameLabel = QLabel() self.userNameLabel.setText("用户名") self.userNameText = InputLine(self, 300, 32) self.passwordLabel = QLabel() self.passwordLabel.setText("密码") self.passwordText = InputLine(self, 300, 32) self.nickNameLabel = QLabel() self.nickNameLabel.setText("昵称") self.nickNameText = InputLine(self, 300, 32) self.genderLabel = QLabel() self.genderLabel.setText("性别") self.boyRadio = QRadioButton('男') self.girlRadio = QRadioButton('女') self.emailLabel = QLabel() self.emailLabel.setText("邮箱") self.emailText = InputLine(self, 300, 32) self.phoneLabel = QLabel() self.phoneLabel.setText("手机") self.phoneText = InputLine(self, 300, 32) self.signLabel = QLabel() self.signLabel.setText("签名") self.signText = InputLine(self, 300, 32)
class Navigation(QScrollArea): def __init__(self, parent=None): """包括博客、用户申请""" super(Navigation, self).__init__(parent) self.parent = parent self.frame = QFrame() self.setMaximumWidth(200) self.setWidget(self.frame) self.setWidgetResizable(True) self.frame.setMinimumWidth(200) # 定义3个事件函数,方便扩展。 self.navigationListFunction = self.none self.nativeListFunction = self.none self.singsFunction = self.none with open('QSS/navigation.qss', 'r') as f: style = f.read() self.setStyleSheet(style) self.frame.setStyleSheet(style) # 包括显示信息: 推荐 我的音乐 歌单。 self.setLabels() # 包括详细的内容:发现音乐,FM,MV等。 self.setListViews() self.setLayouts() self.bindConnect() # 布局。 def setLabels(self): """定义所有的标签。""" self.userLabel = QLabel(" 用户管理") self.userLabel.setObjectName("userManagement") self.userLabel.setMaximumHeight(27) self.blogLabel = QLabel(" 博客管理") self.blogLabel.setObjectName("blogManagement") self.blogLabel.setMaximumHeight(27) # self.myMusic.setMaximumHeight(54) self.otherLabel = QLabel(" 其他...") self.otherLabel.setObjectName("otherLabel") self.otherLabel.setMaximumHeight(27) def setListViews(self): """定义承载功能的ListView""" self.userItemList = QListWidget() self.userItemList.setMaximumHeight(110) self.userItemList.setObjectName("userItemList") self.userItemList.addItem(QListWidgetItem("♠ 个人信息")) self.userItemList.addItem(QListWidgetItem("❧ 新增用户")) self.userItemList.addItem(QListWidgetItem("ღ 用户查找")) self.userItemList.setCurrentRow(0) self.blogItemList = QListWidget() self.blogItemList.setObjectName("blogItemList") self.blogItemList.setMaximumHeight(100) # self.blogItemList.addItem(QListWidgetItem(QIcon('resource/notes.png'), "☯ 博客浏览")) self.blogItemList.addItem(QListWidgetItem("☯ 博客浏览")) self.blogItemList.addItem(QListWidgetItem("☪ 我的博客")) self.blogItemList.addItem(QListWidgetItem("✯ 博客发表")) def setLayouts(self): """定义布局。""" self.mainLayout = VBoxLayout(self.frame) self.mainLayout.addSpacing(10) self.mainLayout.addWidget(self.blogLabel) self.mainLayout.addSpacing(10) self.mainLayout.addWidget(self.blogItemList) self.mainLayout.addSpacing(10) self.mainLayout.addWidget(self.userLabel) self.mainLayout.addSpacing(10) self.mainLayout.addWidget(self.userItemList) self.mainLayout.addSpacing(1) self.mainLayout.addWidget(self.otherLabel) self.mainLayout.addSpacing(1) self.mainLayout.addStretch(1) self.setContentsMargins(0, 0, 0, 0) def bindConnect(self): self.blogItemList.itemPressed.connect(self.blogItemListClickEvent) self.userItemList.itemPressed.connect(self.userItemListClickEvent) def userItemListClickEvent(self): print(self.userItemList.currentRow()) self.blogItemList.setCurrentRow(-1) row = self.userItemList.currentRow() if 0 <= row < 3: self.parent.mainContents.setCurrentIndex(row) def blogItemListClickEvent(self): self.userItemList.setCurrentRow(-1) if self.blogItemList.currentRow() == 0: self.parent.mainContents.setCurrentIndex(3) elif self.blogItemList.currentRow() == 1: self.parent.mainContents.setCurrentIndex(4) elif self.blogItemList.currentRow() == 2: self.parent.mainContents.setCurrentIndex(5) # just a test. def setSingsList(self): pass # 功能。 def none(self): # 没有用的空函数。 pass
class Header(QFrame): def __init__(self, parent=None): """头部区域,包括图标/搜索/设置/登陆/最大/小化/关闭。""" super(Header, self).__init__() self.setObjectName('Header') self.parent = parent # 用于确定是否最大化. self.isMax = False with open('qss/header.qss', 'r', encoding='utf-8') as f: self.setStyleSheet(f.read()) # 加载按钮设置。 self.setButtons() # 加载小细线装饰。 self.setLines() # 加载布局设置。 self.setLayouts() self.bindConnect() # 布局。 def setButtons(self): """创建所有的按钮。""" self.logoLabel = PicLabel(r'resource/header.png', 32, 32) self.descriptionLabel = QLabel(self) self.descriptionLabel.setText("<b>酌酒援北斗</b>") self.userName = QLabel(self) self.userName.setText("<b>" + self.parent.parent.user.user_name + "</b>") self.userPix = PicLabel(IMAGE_BASE + self.parent.parent.user.avatar, 32, 32) self.userPix.setMinimumSize(22, 22) self.userPix.setObjectName("userPix") self.closeButton = QPushButton('×', self) self.closeButton.setObjectName("closeButton") self.closeButton.setMinimumSize(21, 17) self.showminButton = QPushButton('-', self) self.showminButton.setObjectName("minButton") self.showminButton.setMinimumSize(21, 17) self.showmaxButton = QPushButton('□') self.showmaxButton.setObjectName("maxButton") self.showmaxButton.setMaximumSize(16, 16) self.loginButton = QPushButton("未登录 ▼", self) self.loginButton.setObjectName("loginButton") self.prevButton = QPushButton("<") self.prevButton.setObjectName("prevButton") self.prevButton.setMaximumSize(28, 22) self.prevButton.setMinimumSize(28, 22) self.nextButton = QPushButton(">") self.nextButton.setObjectName("nextButton") self.nextButton.setMaximumSize(28, 22) self.nextButton.setMinimumSize(28, 22) def setLines(self): """设置装饰用小细线。""" self.line1 = QFrame(self) self.line1.setObjectName("line1") self.line1.setFrameShape(QFrame.VLine) self.line1.setFrameShadow(QFrame.Plain) self.line1.setMaximumSize(1, 25) def setLayouts(self): """设置布局。""" self.mainLayout = QHBoxLayout() self.mainLayout.setSpacing(0) self.mainLayout.addWidget(self.logoLabel) self.mainLayout.addWidget(self.descriptionLabel) self.mainLayout.addSpacing(30) self.mainLayout.addWidget(self.prevButton) self.mainLayout.addWidget(self.nextButton) self.mainLayout.addStretch(1) self.mainLayout.addWidget(self.userPix) self.mainLayout.addSpacing(10) self.mainLayout.addWidget(self.userName) self.mainLayout.addSpacing(18) self.mainLayout.addWidget(self.loginButton) self.mainLayout.addSpacing(7) self.mainLayout.addWidget(self.line1) self.mainLayout.addSpacing(30) self.mainLayout.addWidget(self.showminButton) self.mainLayout.addSpacing(8) self.mainLayout.addWidget(self.showmaxButton) self.mainLayout.addSpacing(8) self.mainLayout.addWidget(self.closeButton) self.setLayout(self.mainLayout) # 事件。 """重写鼠标事件,实现窗口拖动。""" def mousePressEvent(self, event): if event.buttons() == Qt.LeftButton: self.parent.m_drag = True self.parent.m_DragPosition = event.globalPos() - self.parent.pos() event.accept() def mouseMoveEvent(self, event): try: if event.buttons() and Qt.LeftButton: self.parent.move(event.globalPos() - self.parent.m_DragPosition) event.accept() except AttributeError: pass def mouseReleaseEvent(self, event): if event.buttons() == Qt.LeftButton: self.m_drag = False def bindConnect(self): self.closeButton.clicked.connect(self.parent.close) self.showminButton.clicked.connect(self.parent.showMinimized) self.showmaxButton.clicked.connect(self.showMaxiOrRevert) def showMaxiOrRevert(self): if self.isMax: self.parent.showNormal() self.isMax = False else: self.parent.showMaximized() self.isMax = True
class LoginWindow(ScrollArea): def __init__(self, parent=None): super(LoginWindow, self).__init__() self.setWindowFlags(Qt.FramelessWindowHint) self.parent = parent self.userService = self.parent.userService self.resize(600, 360) self.setObjectName("LoginWindow") self.mainLayout = VBoxLayout(self) self.header = Header("登录", self) self.header.setMinimumHeight(30) self.user_label = QLabel("用户名") self.user_label.setObjectName("UserName") self.user_label.setMaximumHeight(27) self.txt_user = InputLine(self, 220, 32, "请输入用户名") self.txt_user.setObjectName("txt_user") self.txt_user.setText("生命练习生") self.pwd_label = QLabel("密码") self.pwd_label.setObjectName("Password") self.pwd_label.setMaximumHeight(27) self.txt_pwd = InputLine(self, 220, 32, "请输入密码") self.txt_pwd.resize(280, 40) self.txt_pwd.setObjectName("txt_pwd") self.txt_pwd.setEchoMode(QLineEdit.Password) self.txt_pwd.setText("123") self.btn_login = QPushButton() self.btn_login.setObjectName("btn_login") self.btn_login.setText("登录") self.btn_login.clicked.connect(self.login) self.btn_register = QPushButton() self.btn_register.setObjectName("btn_register") self.btn_register.setText("注册账号") self.setLayouts() with open('qss/Login_style.qss', 'r', encoding='utf-8') as f: self.setStyleSheet(f.read()) def setLayouts(self): self.mainLayout = VBoxLayout() self.mainLayout.addWidget(self.header) self.mainLayout.addStretch() self.infoLayout = HBoxLayout() self.infoLayout.addStretch() self.labelLayout = VBoxLayout() self.labelLayout.addWidget(self.user_label) self.labelLayout.addSpacing(10) self.labelLayout.addWidget(self.pwd_label) self.infoLayout.addLayout(self.labelLayout) self.infoLayout.addSpacing(40) self.msgLayout = VBoxLayout() self.msgLayout.addWidget(self.txt_user) self.msgLayout.addSpacing(10) self.msgLayout.addWidget(self.txt_pwd) self.infoLayout.addLayout(self.msgLayout) self.infoLayout.addStretch() self.mainLayout.addLayout(self.infoLayout) self.mainLayout.addSpacing(15) self.mainLayout.addSpacing(40) self.loginLayout = HBoxLayout() self.loginLayout.addSpacing(150) self.loginLayout.addWidget(self.btn_login) self.loginLayout.addSpacing(150) self.registerLayout = HBoxLayout() self.registerLayout.addSpacing(150) self.registerLayout.addWidget(self.btn_register) self.registerLayout.addSpacing(150) self.mainLayout.addLayout(self.loginLayout) self.mainLayout.addSpacing(10) self.mainLayout.addLayout(self.registerLayout) self.mainLayout.addStretch() self.frame.setLayout(self.mainLayout) def login(self): username = self.txt_user.text() password = self.txt_pwd.text() print(username, password) user = self.userService.login(username, password) if user is not None: self.parent.user = user self.parent.loginSuccess() else: QMessageBox.information(self, "提示", "用户名或密码错误!", QMessageBox.Yes)