PyQt:左側選項卡


寫在前面

  正在用pyqt寫我們比賽項目的客戶端,針對左側選項卡,寫了一個簡單的demo。記錄一下。

 

環境

  Python3.5.2

  PyQt5

 

陳述

  用的結構是左邊一個QListWidget + 右邊QStackedWidget,將QWebView加在QStackedWidget上(因為打算用來展示一些charts,用的pyecharts做的數據可視化,生成的html文件,直接嵌入在客戶端內,因此用QWebView來顯示,關於pyecharts可以看我另外一篇文章https://www.cnblogs.com/jyroy/p/9446486.html)

  我用的QSS來進行QListWidget的美化,做成類似網易雲音樂的側邊欄的樣子,我用的是QSS Editor寫的QSS(強烈推薦,好用!!),py代碼、QSS代碼和效果展示如下

  詳細注釋見代碼

 

py代碼如下

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 # Author: jyroy
 4 import sys
 5 
 6 from PyQt5.QtCore import QUrl
 7 from PyQt5.QtWebKitWidgets import QWebView
 8 from PyQt5.QtWidgets import QApplication
 9 from PyQt5.QtWidgets import QListWidget,QStackedWidget
10 from PyQt5.QtWidgets import QListWidgetItem
11 from PyQt5.QtWidgets import QWidget
12 from PyQt5.QtWidgets import QHBoxLayout
13 
14 from PyQt5.QtCore import QSize, Qt
15 
16 
17 
18 class LeftTabWidget(QWidget):
19     '''左側選項欄'''
20     def __init__(self):
21         super(LeftTabWidget, self).__init__()
22         self.setObjectName('LeftTabWidget')
23         
24         self.setWindowTitle('LeftTabWidget')
25         with open('D:/python/code/qt/test/QSS/QListWidgetQSS.qss', 'r') as f:   #導入QListWidget的qss樣式
26             self.list_style = f.read()
27 
28         self.main_layout = QHBoxLayout(self, spacing=0)     #窗口的整體布局
29         self.main_layout.setContentsMargins(0,0,0,0)
30 
31         self.left_widget = QListWidget()     #左側選項列表
32         self.left_widget.setStyleSheet(self.list_style)
33         self.main_layout.addWidget(self.left_widget)
34 
35         self.right_widget = QStackedWidget()
36         self.main_layout.addWidget(self.right_widget)
37 
38         self._setup_ui()
39 
40     def _setup_ui(self):
41         '''加載界面ui'''
42 
43         self.left_widget.currentRowChanged.connect(self.right_widget.setCurrentIndex)   #list和右側窗口的index對應綁定
44 
45         self.left_widget.setFrameShape(QListWidget.NoFrame)    #去掉邊框
46 
47         self.left_widget.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)  #隱藏滾動條
48         self.left_widget.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
49 
50         list_str = ['崗位需求','專業要求','薪水分布','城市分布']
51         url_list = ['job_num_wordcloud.html', 'edu_need.html', 'salary_bar.html', 'edu_salary_bar.html']
52 
53         for i in range(4):
54             self.item = QListWidgetItem(list_str[i],self.left_widget)   #左側選項的添加
55             self.item.setSizeHint(QSize(30,60))
56             self.item.setTextAlignment(Qt.AlignCenter)                  #居中顯示
57 
58             self.browser = QWebView()                                   #右側用QWebView來顯示html網頁
59             self.browser.setUrl(QUrl.fromLocalFile('D://python//code//vision//%s' % url_list[i]))
60             self.right_widget.addWidget(self.browser)
61 
62 
63 
64 def main():
65     ''' '''
66     app = QApplication(sys.argv)
67 
68     main_wnd = LeftTabWidget()
69     main_wnd.show()
70 
71     app.exec()
72 
73 if __name__ == '__main__':
74     main()

 

QSS代碼如下

 1 QListWidget, QListView, QTreeWidget, QTreeView {
 2     outline: 0px;
 3 }
 4 
 5 QListWidget {
 6     min-width: 120px;
 7     max-width: 120px;
 8     color: Black;
 9     background: #F5F5F5;
10 }
11 
12 QListWidget::Item:selected {
13     background: lightGray;
14     border-left: 5px solid red;
15 }
16 HistoryPanel:hover {
17     background: rgb(52, 52, 52);
18 }

 

 

效果展示

 

  

寫在后面

  因為只是寫了一個demo,所以沒有進行很深入的調整,主要展示側邊欄,大家見諒~

  歡迎交流!

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM