【问题标题】:Add scroll bar into tab PYQT5将滚动条添加到选项卡 PYQT5
【发布时间】:2020-11-23 10:27:03
【问题描述】:

我想在标签中创建一个滚动条(pyqt5),基于下面链接中的示例,我做了一些更改以满足我的需要,但滚动条没有显示在标签上,我的图表变小了。

示例PyQt4 - how to add scrollbar into tabbed windows of fixed size?

导入文件https://filebin.net/u3m7m3x2k74wlm6l

import sys
import os
import pandas as pd
from PyQt5.QtWidgets import ( QApplication, QWidget,QHBoxLayout,QVBoxLayout,QPushButton,QTabWidget,QMainWindow,QGridLayout,QSizePolicy\
                            ,QScrollArea,QGroupBox)
from PyQt5.QtGui import *
from PyQt5.QtCore import *
#import html 
import plotly.offline as po
import plotly.express as px
import plotly.graph_objs as go
from PyQt5.QtWebEngineWidgets import *

class Win(QMainWindow):
    def __init__(self):
        super().__init__()    
        self.setGeometry(100,100, 1280,900)
        self.GuiApp=App()
        self.setCentralWidget(self.GuiApp)
        self.show()

class Tab1(QWidget):
    def __init__(self, parent=None):
        super(Tab1, self).__init__(parent)

        df = pd.read_csv(r'C:/Users/User/Desktop/Python-setup test/Plot122.csv')# need to download the file from https://filebin.net/u3m7m3x2k74wlm6l 
        data1 = px.line(df,x = 'Date', y ='AAPL.Open', color = 'Category')
        fig4 = go.Figure(data1)
        raw_html = '<html><head><meta charset="utf-8" />'
        raw_html += '<script src="https://cdn.plot.ly/plotly-latest.min.js"></script></head>'
        raw_html += '<body>'
        raw_html += po.plot(fig4, include_plotlyjs=False, output_type='div')
        raw_html += '</body></html>'
#fig_view
        fig_view1 = QWebEngineView()
        fig_view2 = QWebEngineView()
        fig_view3 = QWebEngineView()
        fig_view4 = QWebEngineView()

        fig_view1.setHtml(raw_html)
        fig_view1.setFixedSize(700,600)
        fig_view1.show()

        fig_view2.setHtml(raw_html)
        fig_view2.setFixedSize(700,600)
        fig_view2.show()

        fig_view3.setHtml(raw_html)
        fig_view3.setFixedSize(700,600)
        fig_view3.show()

        fig_view4.setHtml(raw_html)
        fig_view4.setFixedSize(700,600)
        fig_view4.show()

        layoutC = QGridLayout()
        layoutC.addWidget(fig_view1,0,0,1,1)
        layoutC.addWidget(fig_view2,0,1,1,1)
        layoutC.addWidget(fig_view3,1,0,1,1)
        layoutC.addWidget(fig_view4,1,1,1,1)

        self.setLayout(layoutC)     
        self.setSizePolicy(QSizePolicy.Maximum,QSizePolicy.Maximum)


class App(QWidget):
    def __init__(self):
        super().__init__()
        self.layout = QGridLayout(self)
        self.setLayout(self.layout)
        #Button
        BT1 = QPushButton('BT1',self) 
        self.layout.addWidget(BT1, 0,0,1,1) 
        

        ##########################################TEST scrollbar in tab ################################################
        tab1 = Tab1(self)

        self.tabs = QTabWidget(self)     
        self.tabs.addTab(tab1, 'Page 1')

        self.groupscrollbox = QGroupBox() 
        self.MVB = QVBoxLayout() 
        self.MVB.addWidget(self.tabs)      
        
        widgetTab = QWidget(self)  
        widgetTab.setLayout(QVBoxLayout())
        widgetTab.layout().addWidget(self.groupscrollbox) 

        self.scroll = QScrollArea()
        self.scroll.setWidget(widgetTab) 
        self.scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.scroll.setWidgetResizable(False)
        self.scroll.setEnabled(True)

        self.groupscrollbox.setLayout(self.MVB) 

        ##########################################TEST scrollbar in tab ################################################  
        self.layout.addWidget(self.groupscrollbox, 0,2,13,1) 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Win()
    sys.exit(app.exec_()) 

我想在“TEST scrollbar in tab”之间的代码的红色框中添加滚动条,以显示所有带有“日期”的图表,最大化窗口时会重叠。 下面显示了图表下方带有“日期”的图表

【问题讨论】:

标签: python tabs pyqt5 qtabwidget qscrollarea


【解决方案1】:

解决办法是把“tab1”是一个QScrollArea,而那个QScrollArea放在QTabWidget中

class App(QWidget):
    def __init__(self):
        super().__init__()
        bt1_button = QPushButton("BT1")
        tab1 = Tab1()

        scrollbar = QScrollArea(widgetResizable=True)
        scrollbar.setWidget(tab1)

        tabwidget = QTabWidget()
        tabwidget.addTab(scrollbar, "Tab1")

        layout = QGridLayout(self)
        layout.addWidget(bt1_button, 0, 0)
        layout.addWidget(tabwidget, 0, 1, 2, 1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 2011-05-10
    • 2018-04-30
    • 2023-04-04
    • 2015-09-02
    相关资源
    最近更新 更多