gpt4 book ai didi

python - 寻求修复大小策略以及滚动区域在选项卡中的显示方式

转载 作者:行者123 更新时间:2023-12-01 00:51:06 25 4
gpt4 key购买 nike

所以我尝试使用 PyQt5 将滚动区域放在选项卡内。只是玩弄一个读取串行端口的系统。

我遇到的问题是,虽然我设置了 QVBoxLayout,但大小似乎没有调整到我想要的大小。它似乎采用了最小尺寸并且没有调整。

我尝试查看提供的网站上有关 QSizePolicy 的文档,但不幸的是它全部标记为 TODO。

https://www.riverbankcomputing.com/static/Docs/PyQt5/api/qtwidgets/qsizepolicy.html

我想知道是否有人有这方面的经验?

import sys
from PyQt5.QtWidgets import QMainWindow, QSizePolicy, QLabel, QGridLayout, QToolTip, QPlainTextEdit, QScrollArea, QApplication, QPushButton, QWidget, QAction, QTabWidget, QHBoxLayout, QVBoxLayout
from PyQt5.QtGui import *
from PyQt5.QtCore import pyqtSlot, QDateTime, Qt, pyqtSignal, QObject, QSize
import datetime
import serial
import serial.tools.list_ports

import threading


class FDSerial(QMainWindow):

def __init__(self):

super().__init__()

self.initUI()

def initUI(self):

self.connected = False
self.fd_line = ""

newAct = QAction(QIcon('icn/001-file.png'), 'New', self)
newAct.triggered.connect(self.init_sc)

self.toolbar = self.addToolBar('New')
self.toolbar.addAction(newAct)

openAct = QAction(QIcon('icn/002-folder.png'), 'Open', self)
self.toolbar.addAction(openAct)

connectAct = QAction(QIcon('icn/003-pendrive.png'), 'Connect', self)
connectAct.triggered.connect(self.find_port)
self.toolbar.addAction(connectAct)

menubar = self.menuBar()
fileMenu = menubar.addMenu('&File')
editMenu = menubar.addMenu('&Settings')
toolsMenu = menubar.addMenu('&Tools')
sessionMenu = menubar.addMenu('&Session')
helpMenu = menubar.addMenu('&Help')

self.statusBar().showMessage('Ready')

self.table_widget = LayoutWidgets(self)
self.setCentralWidget(self.table_widget)

self.setGeometry(400, 400, 800, 600)
self.setWindowTitle('FD Serial Demo')
self.show()

self.c = Communicate()
self.c.serialStuff.connect(lambda: self.table_widget.add_row(self.fd_line))

def init_sc(self):
self.ser = serial.Serial()
self.ser.baudrate = 115200
self.is_connected = False
self.tests_run = 0
self.port_found = False

def find_port(self):
if self.is_connected is False:
self.is_connected = True
else:
self.is_connected = False
for port in serial.tools.list_ports.comports():
if port.vid == 5824 and port.pid == 1155:
self.ser.port = str(port.device)
self.port_found = True
print("Found")
if self.port_found is False:
print("Not found")
x = threading.Thread(target=self.talk_module)
x.start()

def talk_module(self):
self.ser.open()
while self.is_connected is True:
self.fd_line = self.ser.readline().decode()
print(self.fd_line)
self.c.serialStuff.emit()
self.ser.close()


class Communicate(QObject):

serialStuff = pyqtSignal()


class LayoutWidgets(QWidget):

def __init__(self, parent):
super(QWidget, self).__init__(parent)

self.layout = QVBoxLayout(self)
self.thisthat = 0

self.mySizePolicy = QSizePolicy()
self.mySizePolicy.setHorizontalStretch(1)
self.mySizePolicy.setVerticalStretch(1)
# self.mySizePolicy.setHeightForWidth(False)
# self.mySizePolicy.setHorizontalPolicy(QSizePolicy.Maximum)
# self.mySizePolicy.setVerticalPolicy(QSizePolicy.Maximum)

self.tabs = QTabWidget()
self.tab1 = QWidget()
self.tab2 = QWidget()

self.tabs.addTab(self.tab1, "Serial CANFD Interface")
self.tabs.addTab(self.tab2, "Data Visualizer")
self.tab1.layout = QVBoxLayout()
self.tab2.layout = QVBoxLayout()

self.scrollArea = QScrollArea(self.tab1)

self.scrollArea.setWidgetResizable(True)

# self.widget = QWidget()
# self.scrollArea.setWidget(self.widget)

self.layout_SArea = QVBoxLayout(self.scrollArea)
self.layout_SArea.setSpacing(0)

self.tab1.layout.addWidget(self.scrollArea)

self.scrollArea.setSizePolicy(self.mySizePolicy)
self.scrollArea.setStyleSheet("background-color:'#d3f3c8'")

self.layout.addWidget(self.tabs)

self.setLayout(self.layout)

self.qtextbig = QPlainTextEdit()

self.qtextbig.setSizePolicy(self.mySizePolicy)

self.qtextbig.setReadOnly(False)
self.layout_SArea.addWidget(self.qtextbig)

def add_row(self, row):
self.this = str(row)
self.this2 = str(datetime.datetime.now().time())
self.thisthat = self.thisthat + 1
self.qtextbig.appendPlainText(self.this)
self.qtextbig.appendPlainText(self.this2)
self.qtextbig.appendPlainText(str(self.thisthat))


if __name__ == '__main__':

app = QApplication(sys.argv)

ex = FDSerial()

sys.exit(app.exec_())

Here is how the GUI looks right now.  The scroll are is way too small!  It is in green.

这是 GUI 现在的样子。卷轴太小了!它是绿色的。

我正在寻找滚动区域来获取整个选项卡大小,然后在调整窗口大小时进行调整。将不胜感激任何指点。

谢谢!

最佳答案

该问题与 QSizePolicy 无关,它们并不是真正必要的。问题是您没有使用布局。我认为使用以下指令:

self.tab1.layout = QVBoxLayout()
self.tab2.layout = QVBoxLayout()

为每个选项卡添加布局,但这只是指出有一个名为layout的新属性,该属性采用QVBoxLayout的值并删除对选项卡布局方法的引用,即仅删除访问到 tab1.layout() 方法,这样做是一个不好的做法。

考虑到上述情况,我使用了以下代码:

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

layout = QVBoxLayout(self)
self.thisthat = 0

self.tabs = QTabWidget()
layout.addWidget(self.tabs)

self.tab1 = QWidget()
self.tab2 = QWidget()

self.tabs.addTab(self.tab1, "Serial CANFD Interface")
self.tabs.addTab(self.tab2, "Data Visualizer")

lay = QVBoxLayout(self.tab1)
self.scrollArea = QScrollArea(widgetResizable=True)
self.scrollArea.setStyleSheet("background-color:'#d3f3c8'")
lay.addWidget(self.scrollArea)

layout_SArea = QVBoxLayout(self.scrollArea)
self.qtextbig = QPlainTextEdit(readOnly=False)
layout_SArea.addWidget(self.qtextbig)

def add_row(self, row):
self.this = str(row)
self.this2 = str(datetime.datetime.now().time())
self.thisthat = self.thisthat + 1
self.qtextbig.appendPlainText(self.this)
self.qtextbig.appendPlainText(self.this2)
self.qtextbig.appendPlainText(str(self.thisthat))
# ...

enter image description here

关于python - 寻求修复大小策略以及滚动区域在选项卡中的显示方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56570567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com