<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      使用PySide6/PyQt6實現程序啟動畫面的處理

      PySide6 / PyQt6 或其他 GUI 程序中,啟動畫面主要有以下幾個作用:提升用戶體驗,當主程序初始化需要幾秒鐘時,如果界面一直空白,用戶可能以為程序沒響應;品牌展示,常見做法是在啟動畫面上放置 公司 Logo、應用圖標、版本號、版權信息;程序架構上的過渡,啟動畫面在主窗口創建前顯示,等主程序準備就緒后再關閉,起到 過渡和占位 的作用。

      1、簡單例子代碼介紹

      PySide6 / PyQt6 里要實現啟動畫面(Splash Screen),通常可以用 QSplashScreen 來完成,和 wx.adv.SplashScreen 類似。它的主要作用是在主窗口加載前,先顯示一個過渡畫面(通常放 logo、版本號、加載提示)。

      簡單的案例代碼如下所示。

      def main():
          app = QApplication(sys.argv)
      
          # 創建啟動畫面
          pixmap = QPixmap(400, 300)  # 可以替換為 QPixmap("logo.png")
          pixmap.fill(Qt.white)  # 這里用純白背景
          splash = QSplashScreen(pixmap)
          splash.showMessage("正在加載,請稍候...", Qt.AlignBottom | Qt.AlignCenter, Qt.black)
          splash.show()
      
          # 模擬加載過程(比如初始化數據庫、加載配置等)
          for i in range(1, 6):
              splash.showMessage(f"正在加載資源 {i}/5 ...", Qt.AlignBottom | Qt.AlignCenter, Qt.black)
              app.processEvents()  # 讓界面刷新
              time.sleep(0.5)
      
          # 加載完成后進入主窗口
          window = MainWindow()
      
          # 延遲關閉啟動畫面并顯示主窗口
          QTimer.singleShot(500, lambda: (
              splash.finish(window),
              window.show()
          ))
      
          sys.exit(app.exec())
      
      
      if __name__ == "__main__":
          main()

      關鍵點:

      1. QSplashScreen

        • 通過 QSplashScreen(QPixmap) 創建。

        • showMessage(text, alignment, color) 用來顯示提示信息。

        • finish(widget) 在主窗口準備好后關閉 Splash,并顯示目標窗口。

      2. app.processEvents()

        • 在耗時操作中調用,確保 Splash 畫面能刷新,不會卡死。

      3. QTimer.singleShot()

        • 可以避免界面卡頓,等初始化完成后關閉啟動畫面。

      2、我使用PySide6/PyQt6實現程序啟動畫面

      參照上面的過程,我們可以改進下程序啟動畫面,并結合程序初始化等過程進行展示。

      我們在程序登錄界面展示,用戶確認登錄成功后,提示啟動畫面的。

      image

       用戶登錄成功后,閃屏啟動頁面進行展示

      image

       實現過程也是和上面的例子類似,不過增加了一些特殊的處理。

      首先封裝好顯示閃屏界面的函數,如下所示。

      def show_splash_screen():
          """顯示啟動閃屏"""
          splash_pix = QPixmap("app/images/splash.png")
          splash = QSplashScreen(splash_pix, Qt.WindowType.WindowStaysOnTopHint)
      
          # 設置字體
          font = QFont("Arial", 20, QFont.Weight.Bold)
          splash.setFont(font)
          splash.showMessage(
              "正在加載,請稍候...",
              Qt.AlignmentFlag.AlignBottom | Qt.AlignmentFlag.AlignCenter,
              Qt.GlobalColor.yellow,
          )
          splash.show()
          return splash

      然后再啟動的main.py的main函數中處理各個操作過程即可。

      async def init_app():
          app = SystemApp()
          await app.SetLoginInfo()
      
      def main():
          app = QApplication(sys.argv)
      
          event_loop = QEventLoop(app)
          asyncio.set_event_loop(event_loop)
      
          app_close_event = asyncio.Event()
          app.aboutToQuit.connect(app_close_event.set)
      
          app.setStyle("Fusion")  # 設置樣式# 顯示登錄窗口
          loginDialog = FrmLogin()
          if loginDialog.exec() != QDialog.DialogCode.Accepted:
              # 如果登錄失敗或取消,程序退出
              sys.exit(0)
      
          # 顯示閃屏
          splash = show_splash_screen()
          # 主窗口
          main_window = MainWindow()
          # 設置托盤圖標
          setup_tray_icon(app, main_window)
          # 閃屏后顯示主界面, 1秒后窗口最大化顯示
          QTimer.singleShot(1000, lambda: (splash.close(), main_window.showMaximized()))
      
          # sys.exit(app.exec())
      
          with event_loop:
              event_loop.create_task(init_app())
              event_loop.run_until_complete(app_close_event.wait())
      
      if __name__ == "__main__":
          main()

      我們的主程序使用了異步的操作,因此和上面的例子有所差異,在用戶登錄成功后,前端會獲得相關的用戶身份信息,并在 init_app() 函數中進行用戶身份信息的獲取和設置。

      我們把用戶身份信息的處理,單獨抽取出來,放在system_app類里面進行處理,如下所示,可以根據登錄用戶的信息,獲取用戶的當前擁有的功能權限,角色集合等等。

      image

      前面隨筆我介紹過, 對于列表和對話框界面的封裝,能夠簡化對泛型模型數據的統一處理,通用對于前端用戶身份信息,我們也可以集中在基類中獲取。

      image

       編輯對話框的基類同樣的處理。

      image

       這樣我們在用戶前端界面中,需要設置用戶當前信息的時候,就可以隨時通過基類函數進行獲取了。

      上面代碼,結合閃屏啟動界面的處理過程,介紹了在用戶登錄成功后,對用戶相關信息的處理過程。

      posted on 2025-09-14 11:57  伍華聰  閱讀(617)  評論(5)    收藏  舉報

      導航

      主站蜘蛛池模板: 国产极品美女高潮抽搐免费网站| 精品一区二区不卡免费| 国产av不卡一区二区| 一区二区三区av天堂| 精品国产美女福到在线不卡| 国产精品无码v在线观看| 国产成人一区二区三区视频免费| 国产亚洲精品久久久久秋霞| 九色精品国产亚洲av麻豆一| 亚洲一区久久蜜臀av| 神马久久亚洲一区 二区| 丰满少妇在线观看网站| 成人免费无码大片A毛片抽搐色欲| 精品无码久久久久国产电影| 二区三区国产在线观看| 亚洲人成网站18禁止无码| 国产精品色哟哟成人av| 免费看黄片一区二区三区| 精品久久久无码中文字幕| 日韩精品福利一区二区三区| 亚洲一区国色天香| av中文字幕国产精品| 亚洲国产成人精品区综合| 国产欧美日韩另类精彩视频| 亚洲午夜亚洲精品国产成人| 中文字幕精品无码一区二区| 国内自拍小视频在线看| 亚洲欧美激情在线一区| 国产成人精品一区二区无| 夜鲁鲁鲁夜夜综合视频| 日韩精品人妻av一区二区三区 | 国产一码二码三码区别| 狠狠色噜噜狠狠狠狠2021| 国产成人精品三上悠亚久久| 国产二区三区不卡免费| 狠狠色综合久久丁香婷婷| 日本乱一区二区三区在线| 日韩一区在线中文字幕| 啊轻点灬大JI巴太粗太长了欧美| 99久久精品国产一区二区| 欧美亚洲一区二区三区在线|