class SearchArea(ScrollArea): def __init__(self, parent=None): super(SearchArea, self).__init__(self) self.parent = parent self.setObjectName("searchArea") with open('QSS/searchArea.qss', 'r', encoding='utf-8') as f: self.setStyleSheet(f.read()) self.mainLayout = QVBoxLayout(self.frame) self.titleLabel = QLabel(self.frame) # 搜索结果的tab。 self.contentsTab = QTabWidget(self.frame) # 加入布局。 self.mainLayout.addWidget(self.titleLabel) self.mainLayout.addWidget(self.contentsTab) self.setSingsFrame() # 布局。 def setSingsFrame(self): # 单曲界面。 self.neteaseSearchFrame = NetEaseSearchResultFrame(self) self.contentsTab.addTab(self.neteaseSearchFrame, "网易云") self.xiamiSearchFrame = XiamiSearchResultFrame(self) self.contentsTab.addTab(self.xiamiSearchFrame, "虾米") self.qqSearchFrame = QQSearchResultFrame(self) self.contentsTab.addTab(self.qqSearchFrame, 'QQ') # 功能。 def setText(self, text): self.text = text self.titleLabel.setText("搜索<font color='#23518F'>“{0}”</font><br>".format(self.text))
class SearchArea(ScrollArea): def __init__(self, parent=None): super(SearchArea, self).__init__(self) self.parent = parent self.setObjectName("searchArea") with open('QSS/searchArea.qss', 'r', encoding='utf-8') as f: self.setStyleSheet(f.read()) self.mainLayout = QVBoxLayout(self.frame) self.titleLabel = QLabel(self.frame) # 搜索结果的tab。 self.contentsTab = QTabWidget(self.frame) # 加入布局。 self.mainLayout.addWidget(self.titleLabel) self.mainLayout.addWidget(self.contentsTab) self.setSingsFrame() # 布局。 def setSingsFrame(self): # 单曲界面。 self.neteaseSearchFrame = NetEaseSearchResultFrame(self) self.contentsTab.addTab(self.neteaseSearchFrame, "网易云") self.xiamiSearchFrame = XiamiSearchResultFrame(self) self.contentsTab.addTab(self.xiamiSearchFrame, "虾米") self.qqSearchFrame = QQSearchResultFrame(self) self.contentsTab.addTab(self.qqSearchFrame, 'QQ') # 功能。 def setText(self, text): self.text = text self.titleLabel.setText( "搜索<font color='#23518F'>“{0}”</font><br>".format(self.text))
class Header(QFrame): def __init__(self, parent=None): """头部区域,包括图标/搜索/设置/登陆/最大/小化/关闭。""" super(Header, self).__init__() self.setObjectName('Header') self.parent = parent self.loginBox = LoginBox(self) with open('QSS/header.qss', 'r', encoding='utf-8') as f: self.setStyleSheet(f.read()) # 加载按钮设置。 self.setButtons() # 加载标签设置。 self.setLabels() # 加载输入框设置。 self.setLineEdits() # 加载小细线装饰。 self.setLines() # 加载布局设置。 self.setLayouts() # 布局。 def setButtons(self): """创建所有的按钮。""" 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.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 setLabels(self): """创建所需的所有标签。""" self.logoLabel = PicLabel(r'resource/format.png', 32, 32) self.descriptionLabel = QLabel(self) self.descriptionLabel.setText("<b>Music<b>") self.userPix = PicLabel(r'resource/no_music.png', 32, 32, r'resource/user_pic_mask.png') self.userPix.setMinimumSize(22, 22) self.userPix.setObjectName("userPix") def setLineEdits(self): """创建搜素框。""" self.searchLine = SearchLineEdit(self) self.searchLine.setPlaceholderText("搜索音乐, 歌手, 歌词, 用户") 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(70) self.mainLayout.addWidget(self.prevButton) self.mainLayout.addWidget(self.nextButton) self.mainLayout.addSpacing(10) self.mainLayout.addWidget(self.searchLine) self.mainLayout.addStretch(1) self.mainLayout.addWidget(self.userPix) self.mainLayout.addSpacing(7) 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(3) 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
class PhoneAndEMailFrame(QFrame): def __init__(self, parent=None): super(PhoneAndEMailFrame, self).__init__() self.parent = parent self.resize(520, 300) with open('QSS/phoneAndEMailFrame.qss', 'r') as f: self.setStyleSheet(f.read()) self.mainLayout = VBoxLayout(self) self.header = Header("用户名", self) self.header.setMinimumHeight(40) self.header.connectCloseButton(self.parent.accept) self.mainLayout.addWidget(self.header) self.mainLayout.addStretch(1) self.usernameLine = InputLine(self, 220, 32, '请输入用户名') self.usernameLine.setObjectName('usernameLine') self.usernameCenterBox = HStretchBox(self.mainLayout, self.usernameLine) self.mainLayout.addSpacing(10) self.passwordLine = InputLine(self, 220, 32, '请输入密码') self.passwordLine.setObjectName('passwordLine') self.passwordCenterBox = HStretchBox(self.mainLayout, self.passwordLine) self.passwordLine.setEchoMode(QLineEdit.Password) self.warningIconLabel = QLabel() self.warningIconLabel.setObjectName('warningIconLabel') self.warningIconLabel.setMaximumSize(14, 14) self.warningIconLabel.setMinimumSize(14, 14) self.warningIconLabel.hide() self.warningLabel = QLabel("请输入用户名") self.warningLabel.hide() self.warningLabel.setObjectName('warningLabel') self.warningCenterBox = HStretchBox(self.mainLayout, self.warningIconLabel, self.warningLabel, behindStretch=2) self.mainLayout.addSpacing(30) self.enterLoginButton = QPushButton("登 录") self.enterLoginButton.setObjectName("enterButton") self.enterLoginButton.setMaximumSize(217, 27) self.enterLoginButton.setMinimumSize(217, 27) self.enterLoginCenterBox = HStretchBox(self.mainLayout, self.enterLoginButton) self.mainLayout.addSpacing(30) self.mainLayout.addStretch(1) def checkAndGetLoginInformation(self): username = self.usernameLine.text() password = self.passwordLine.text() if not username or not password: self.warningIconLabel.show() if not username: self.warningLabel.setText('请输入用户名') self.warningLabel.show() return False if not password: self.warningLabel.setText('请输入密码') self.warningLabel.show() return False self.warningIconLabel.hide() self.warningLabel.hide() return username, password def setWarningAndShowIt(self, warningStr): self.warningLabel.setText(warningStr) self.warningLabel.show() self.warningIconLabel.show() def connectLogin(self, functionName): self.enterLoginButton.clicked.connect(functionName)
class SearchArea(ScrollArea): def __init__(self, parent=None): super(SearchArea, self).__init__(self) self.parent = parent self.setObjectName("searchArea") with open('QSS/searchArea.qss', 'r', encoding='utf-8') as f: self.setStyleSheet(f.read()) self.mainLayout = QVBoxLayout(self.frame) self.titleLabel = QLabel(self.frame) # 搜索结果的tab。 self.contentsTab = QTabWidget(self.frame) # 加入布局。 self.mainLayout.addWidget(self.titleLabel) self.mainLayout.addWidget(self.contentsTab) self.setSingsFrame() # 布局。 def setSingsFrame(self): # 单曲界面。 self.singsFrame = QFrame() self.singsFrameLayout = VBoxLayout(self.singsFrame) self.noSingsContentsLabel = QLabel(self.singsFrame) self.noSingsContentsLabel.setMaximumHeight(60) self.noSingsContentsLabel.setObjectName("noSingsLable") self.noSingsContentsLabel.hide() self.singsResultTable = TableWidget(3, ['音乐标题', '歌手', '时长']) self.singsResultTable.setObjectName('singsTable') self.singsResultTable.setMinimumWidth(self.width()) self.singsResultTable.setColumnWidths({ i: j for i, j in zip(range(3), [ self.width() / 3 * 1.25, self.width() / 3 * 1.25, self.width() / 3 * 0.5 ]) }) self.singsFrameLayout.addWidget(self.singsResultTable, Qt.AlignTop | Qt.AlignCenter) self.centerLabelLayout = HBoxLayout() self.centerLabelLayout.addStretch(1) self.centerLabelLayout.addWidget(self.noSingsContentsLabel) self.centerLabelLayout.addStretch(1) self.singsFrameLayout.addLayout(self.centerLabelLayout) self.contentsTab.addTab(self.singsFrame, "单曲") # 功能。 def setText(self, text): self.text = text self.titleLabel.setText( "搜索<font color='#23518F'>“{0}”</font><br>".format(self.text))
class Header(QFrame): def __init__(self, parent=None): """头部区域,包括图标/搜索/设置/登陆/最大/小化/关闭。""" super(Header, self).__init__() self.setObjectName('Header') self.parent = parent self.loginBox = LoginBox(self) with open('QSS/header.qss', 'r', encoding='utf-8') as f: self.setStyleSheet(f.read()) # 加载按钮设置。 self.setButtons() # 加载标签设置。 self.setLabels() # 加载输入框设置。 self.setLineEdits() # 加载小细线装饰。 self.setLines() # 加载布局设置。 self.setLayouts() # 布局。 def setButtons(self): """创建所有的按钮。""" 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 setLabels(self): """创建所需的所有标签。""" self.logoLabel = PicLabel(r'resource/format.png', 32, 32) self.descriptionLabel = QLabel(self) self.descriptionLabel.setText("<b>Music</b>") self.userPix = PicLabel(r'resource/no_music.png', 32, 32, r'resource/user_pic_mask.png') self.userPix.setMinimumSize(22, 22) self.userPix.setObjectName("userPix") def setLineEdits(self): """创建搜素框。""" self.searchLine = SearchLineEdit(self) self.searchLine.setPlaceholderText("搜索音乐, 歌手, 歌词, 用户") 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(70) self.mainLayout.addWidget(self.prevButton) self.mainLayout.addWidget(self.nextButton) self.mainLayout.addSpacing(10) self.mainLayout.addWidget(self.searchLine) self.mainLayout.addStretch(1) self.mainLayout.addWidget(self.userPix) self.mainLayout.addSpacing(7) 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.addWidget(self.showmaxButton) self.mainLayout.addSpacing(3) 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