class MainWindow(QMainWindow): def __init__(self, h, w): super(MainWindow, self).__init__() self.widgetList = QStackedWidget() self.widgetList.setFixedSize(w, h) self.setCentralWidget(self.widgetList) self.widgetList.addWidget(Welcome(self))
class MainWindow(QWidget): def __init__(self): super(MainWindow, self).__init__() self.title_widget = TitleWidget() authorization_widget = AuthorizationWidget() authorization_widget.authorized.connect(self.on_authorized) self.main_stacked = QStackedWidget() self.main_stacked.setFixedSize(400, 260) self.main_stacked.addWidget(authorization_widget) self.footer_widget = FooterWidget() self.main_layout = QGridLayout() self.main_layout.setContentsMargins(24, 12, 24, 12) self.main_layout.addWidget(self.title_widget, 0, 0, Qt.AlignTop) self.main_layout.addWidget(self.main_stacked, 1, 0, Qt.AlignCenter) self.main_layout.addWidget(self.footer_widget, 2, 0, Qt.AlignBottom) self.setLayout(self.main_layout) self.resize(480, 320) def mousePressEvent(self, a0) -> None: self.setFocus() @pyqtSlot() def on_authorized(self): broadcast_setup_widget = BroadcastSetupWidget() broadcast_setup_widget.broadcast_created.connect(self.on_broadcast_created) self.switch_to_widget(broadcast_setup_widget) @pyqtSlot(Broadcast) def on_broadcast_created(self, broadcast: Broadcast): broadcast_ready_widget = BroadcastReadyWidget(broadcast) broadcast_ready_widget.new_broadcast.connect(self.on_authorized) self.switch_to_widget(broadcast_ready_widget) def switch_to_widget(self, widget: QWidget): focus_widget = self.main_stacked.focusWidget() self.main_stacked.setCurrentIndex(self.main_stacked.addWidget(widget)) self.main_stacked.removeWidget(focus_widget) focus_widget.deleteLater()
class LeftPanel(QWidget): def __init__(self, width, hight, parent=None): super(LeftPanel, self).__init__(parent) # set width and hight self.width = width self.hight = hight # declare path string self.unknownUser = "******" self.menuIcon = "../img/menu-icon.png" # declare user picture label self.pic = QLabel(self) self.pic.setScaledContents(True) # declare control panel self.controlPanel = QStackedWidget(self) # declare control button # for visitor and temp user self.homeB0 = QPushButton("Home") self.searchB0 = QPushButton("Search") # for develop has no transaction history self.homeB1 = QPushButton("Home") self.searchB1 = QPushButton("Search") self.ProjectB1 = QPushButton("Project") self.messageB1 = QPushButton("Message") self.historyB1 = QPushButton("History") self.manageTeam1 = QPushButton("Team Manager") # for develop has transaction history self.homeB2 = QPushButton("Home") self.searchB2 = QPushButton("Search") self.ProjectB2 = QPushButton("Project") self.messageB2 = QPushButton("Message") self.historyB2 = QPushButton("History") self.manageTeam2 = QPushButton("Team Manager") # for client has no transaction history self.homeB3 = QPushButton("Home") self.searchB3 = QPushButton("Search") self.ProjectB3 = QPushButton("Project") self.messageB3 = QPushButton("Message") self.historyB3 = QPushButton("History") # for client has transaction history self.homeB4 = QPushButton("Home") self.searchB4 = QPushButton("Search") self.ProjectB4 = QPushButton("Project") self.messageB4 = QPushButton("Message") self.historyB4 = QPushButton("History") # for superuser self.manage = QPushButton("System Manager") self.messageB5 = QPushButton("Message") # for new user self.homeB5 = QPushButton("Home") self.searchB5 = QPushButton("Search") # declare function button self.funcbutt = QToolButton(self) self.mu = QMenu() # declare action self.personalInfo = QAction("Personal Information") self.grandStat = QAction("Grand Statistic") self.out = QAction("Sign Out") # start initUI self.initUI() def initUI(self): # set LeftPanel size self.setFixedSize(self.width, self.hight) # set LeftPanel background color self.setAutoFillBackground(True) palette = QPalette() palette.setColor(self.backgroundRole(), QColor(40, 42, 45)) self.setPalette(palette) # set pic self.setpic(self.unknownUser) # set pic size self.pic.setFixedSize(self.width - 20, self.width - 20) # add pic to LeftPanel self.pic.move(10, 10) # set stackWidget size self.controlPanel.setFixedSize(self.width, self.hight - 250) # add visitor page to controlPanel v = QWidget() vly = QFormLayout() vly.addRow(self.homeB0) vly.addRow(self.searchB0) v.setLayout(vly) self.controlPanel.addWidget(v) # add dev has no transaction to controlpanel dnt = QWidget() dntly = QFormLayout() dntly.addRow(self.homeB1) dntly.addRow(self.searchB1) dntly.addRow(self.ProjectB1) dntly.addRow(self.messageB1) dntly.addRow(self.historyB1) dntly.addRow(self.manageTeam1) dnt.setLayout(dntly) self.controlPanel.addWidget(dnt) # add dev has transaction to controlPanel dt = QWidget() dtly = QFormLayout() dtly.addRow(self.homeB2) dtly.addRow(self.searchB2) dtly.addRow(self.ProjectB2) dtly.addRow(self.messageB2) dtly.addRow(self.historyB2) dtly.addRow(self.manageTeam2) dt.setLayout(dtly) self.controlPanel.addWidget(dt) # add client has no transaction cnt = QWidget() cntly = QFormLayout() cntly.addRow(self.homeB3) cntly.addRow(self.searchB3) cntly.addRow(self.ProjectB3) cntly.addRow(self.messageB3) cntly.addRow(self.historyB3) cnt.setLayout(cntly) self.controlPanel.addWidget(cnt) # add client has transaction ct = QWidget() ctly = QFormLayout() ctly.addRow(self.homeB4) ctly.addRow(self.searchB4) ctly.addRow(self.ProjectB4) ctly.addRow(self.messageB4) ctly.addRow(self.historyB4) ct.setLayout(ctly) self.controlPanel.addWidget(ct) # add super user su = QWidget() suly = QFormLayout() suly.addRow(self.manage) suly.addRow(self.messageB5) su.setLayout(suly) self.controlPanel.addWidget(su) # add new user new = QWidget() newly = QFormLayout() newly.addRow(self.homeB5) newly.addRow(self.searchB5) new.setLayout(newly) self.controlPanel.addWidget(new) # add controlPanel to LeftPanel self.controlPanel.setCurrentIndex(0) self.controlPanel.move(0, 180) # set funcbutt menu self.setFuncMenu(False) self.funcbutt.setPopupMode(QToolButton.InstantPopup) self.funcbutt.setMenu(self.mu) # set image for funcbutt self.funcbutt.setIcon(QIcon(self.menuIcon)) self.funcbutt.setIconSize(QSize(60, 30)) # add funcbutt to LeftPanel self.funcbutt.setFixedSize(61, 31) self.funcbutt.move(39, self.hight - 43) # connect menu event def setpic(self, user_id): """ set pic to the path image""" pixmap = QPixmap("../resources/pictures/" + user_id) # when path not found if (pixmap.isNull()): pixmap = QPixmap(self.unknownUser) # scaled and set pixmap.scaled(60, 60, Qt.KeepAspectRatio) self.pic.setPixmap(pixmap) def setFuncMenu(self, login): if login: self.mu.clear() self.mu.addAction(self.grandStat) self.mu.addAction(self.personalInfo) self.mu.addAction(self.out) else: self.mu.clear() self.mu.addAction(self.grandStat)
class HomepageUI(QScrollArea): """ 首页UI """ CONTROL_LEFT_DISTANCE = 428 def __init__(self, *args, **kwargs): super(HomepageUI, self).__init__(*args, **kwargs) self.container = QWidget(self) # 全局控件(scrollArea的幕布) layout = QHBoxLayout() layout.setContentsMargins(QMargins(0, 0, 0, 0)) # 左侧的菜单列表控件 self.left_menu = QListWidget(self) # 固定宽度 self.left_menu.setFixedWidth(42) layout.addWidget(self.left_menu) # 左侧菜单对应的stackedWidget self.left_stacked = QStackedWidget(self) # 固定宽度 self.left_stacked.setFixedSize(370, 300) # 固定宽度,广告的高度 right_layout = QVBoxLayout() menu_ad_layout = QHBoxLayout() # 菜单与广告布局 menu_ad_layout.addWidget(self.left_stacked) # 图片轮播控件 self.slide_stacked = SlidingStackedWidget(self) # 广告图片的高度 self.slide_stacked.setFixedHeight(300) self.slide_stacked.setMaximumWidth(745) # 在轮播控件上选择按钮 self.control_widget = QWidget(self) self.control_widget.setFixedHeight(300) self.control_widget.move(self.CONTROL_LEFT_DISTANCE, 0) control_layout = QVBoxLayout() control_layout.setAlignment(Qt.AlignVCenter) self.control_widget.setLayout(control_layout) menu_ad_layout.addWidget(self.slide_stacked) menu_ad_layout.addStretch() right_layout.addLayout(menu_ad_layout) # 其他模块 modules_layout = QGridLayout() modules_layout.setContentsMargins(QMargins(0, 0, 0, 0)) modules_layout.setAlignment(Qt.AlignTop | Qt.AlignLeft) # 短信通 self.instant_message_widget = ModuleWidget(self) self.instant_message_widget.setFixedSize(370, 300) self.instant_message_widget.setObjectName("moduleWidget") self.instant_message_widget.set_title("即时资讯") modules_layout.addWidget(self.instant_message_widget, 0, 0) # 现货报价 self.spot_price_widget = ModuleWidget(self) self.spot_price_widget.setFixedSize(370, 300) self.spot_price_widget.setObjectName("moduleWidget") self.spot_price_widget.set_title("现货报价") modules_layout.addWidget(self.spot_price_widget, 0, 1) # 日报 self.daily_report_widget = ModuleWidget(self) self.daily_report_widget.setFixedSize(370, 300) self.daily_report_widget.setObjectName("moduleWidget") self.daily_report_widget.set_title("收盘日评") modules_layout.addWidget(self.daily_report_widget, 0, 2) # 周报 self.weekly_report_widget = ModuleWidget(self) self.weekly_report_widget.setFixedSize(370, 300) self.weekly_report_widget.setObjectName("moduleWidget") self.weekly_report_widget.set_title("研究周报") modules_layout.addWidget(self.weekly_report_widget, 1, 0) # 月季报告 self.monthly_report_widget = ModuleWidget(self) self.monthly_report_widget.setFixedSize(370, 300) self.monthly_report_widget.setObjectName("moduleWidget") self.monthly_report_widget.set_title("月季报告") modules_layout.addWidget(self.monthly_report_widget, 1, 1) # 月季报告 self.annual_report_widget = ModuleWidget(self) self.annual_report_widget.setFixedSize(370, 300) self.annual_report_widget.setObjectName("moduleWidget") self.annual_report_widget.set_title("年度报告") modules_layout.addWidget(self.annual_report_widget, 1, 2) right_layout.addLayout(modules_layout) layout.addLayout(right_layout) self.container.setLayout(layout) self.setWidget(self.container) self.setWidgetResizable(True) self.horizontalScrollBar().setStyleSheet(HORIZONTAL_SCROLL_STYLE) self.verticalScrollBar().setStyleSheet(VERTICAL_SCROLL_STYLE) self.left_menu.setObjectName("LeftMenuList") self.setStyleSheet( "#LeftMenuList{border:none;color:rgb(254,254,254);font-size:14px;" "background-color:rgb(233,26,46);outline:none;}" "#LeftMenuList::item{padding:5px 0 5px 0px}" "#LeftMenuList::item:selected{background-color:rgb(240,240,240);color:rgb(0,0,0);out-line:none}" "#moduleWidget{background-color:rgb(254,254,254);border:1px solid rgb(240,240,240)}" )
super(Downloader, self).__init__() self.title = title self.url = url self.extension = extension def run(self): book_module.downloadBook(self.title, self.url, self.extension) if __name__ == '__main__': app = QApplication(sys.argv) bookmark_module.makeFiles() main_win = MainWin() search = Search() bookmarks = Bookmarks() book_page = bookPage() stackedWidget = QStackedWidget() stackedWidget.addWidget(main_win) stackedWidget.addWidget(search) stackedWidget.addWidget(bookmarks) stackedWidget.addWidget(book_page) stackedWidget.setFixedSize(712, 403) stackedWidget.setStyleSheet("background-color: rgb(54, 54, 54); " "color: rgb(255, 255, 255);") stackedWidget.show() sys.exit(app.exec_())