我已经使用pyqt5创建了一个在另一个程序中运行的接口。为此,我使用了我在文章结尾处的代码。在任何情况下,正如可以看到的,在一个循环(for i in range(0,7):)上创建了几行网格布局,问题来自于此,本节中的行数(在示例7中),它取决于外部变量,可以等于N个数。当N太大时,创建的窗口大于屏幕,我无法更改不可见行的选项,也无法访问/取消窗口。我正在寻求帮助来解决这个问题,我希望添加一个4或5高度的(网格布局的)线的可滚动部分(用于for循环的线),它有一个可滚动条,我可以使用它来查看在循环中创建的不同线。但我无法让它工作,也找不到正确的教程来解释这一点。我还添加了一张我现在拥有的内容的截图和一个我想做的事情的模型:
def fun_1():
print('a')
def fun_2():
print('a')
def fun_3():
print('a')
from PyQt5.QtWidgets import QWidget, QMessageBox
from PyQt5 import QtCore, QtGui
import PyQt5.QtCore as QtCore
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
dialog = QDialog()
dialog.resize(550,50)
dialog.setWindowTitle("Input size")
layout = QGridLayout(dialog)
counter=0
checkBox=QCheckBox('checkBox')
checkBox.setChecked(1)
layout.addWidget(checkBox,counter,0,1,5)
checkBox.stateChanged.connect(fun_1)
label_ratio=QLabel('<b>Label 1:</b>')
layout.addWidget(label_ratio,counter,4,1,1)
label_ratio.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
inputsLines_1=[[] for i in range(0,8)]
inputsLines_1[-1]=QLineEdit("value")
layout.addWidget(inputsLines_1[-1],counter,5,1,4)
counter=counter+1
sepBar_1=QLabel("<b>======================================================================================================================</b>")
layout.addWidget(sepBar_1,counter,0,1,8)
counter=counter+1
title=QLabel("<b>Group i</b>: [min, max]<b>*</b>")
layout.addWidget(title,counter,1,1,1)
aclaration3=QLabel("<b>Show/Hide</b>")
layout.addWidget(aclaration3,counter,7,1,1)
counter=counter+1
sepBar_2=QLabel("<b>===================================================== [Group] =====================================================</b>")
layout.addWidget(sepBar_2,counter,0,1,8)
counter=counter+1
combobox=[[] for i in range(0,7)]
comboboxCurrentItem=[[] for i in range(0,7)]
label_1=[[] for i in range(0,7)]
label_1CurrentItem=[[] for i in range(0,7)]
inputsLines_1=[[] for i in range(0,7)]
inputsLines_1CurrentItem=[[] for i in range(0,7)]
label_2=[[] for i in range(0,7)]
label_2CurrentItem=[[] for i in range(0,7)]
inputsLines_2=[[] for i in range(0,7)]
inputsLines_2CurrentItem=[[] for i in range(0,7)]
checkBoxShowHide=[[] for i in range(0,7)]
option= ['option 1']
for i in range(0,7):
w = QLabel(" ")
w.setStyleSheet("background:rgb("+str(i)+");")
layout.addWidget(w,counter,0,1,1)
groupLabel=QLabel("<b>Group "+str(i)+"</b>")
layout.addWidget(groupLabel,counter,1,1,1)
combobox[i]=QComboBox()
combobox[i].addItems(option)
combobox[i].setCurrentText(option[0])
comboboxCurrentItem[i]=combobox[i].currentText()
combobox[i].currentTextChanged.connect(fun_2)
layout.addWidget(combobox[i],counter,2,1,1)
label_1[i]=QLabel('a:')
label_1CurrentItem[i]=label_1[i].text()
layout.addWidget(label_1[i],counter,3,1,1)
inputsLines_1[i]=QLineEdit("0")
inputsLines_1CurrentItem[i]=inputsLines_1[i].text()
layout.addWidget(inputsLines_1[i],counter,4,1,1)
label_2[i]=QLabel('b:')
label_2CurrentItem[i]=label_2[i].text()
layout.addWidget(label_2[i],counter,5,1,1)
inputsLines_2[i]=QLineEdit(str(1))
inputsLines_2CurrentItem[i]=inputsLines_2[i].text()
layout.addWidget(inputsLines_2[i],counter,6,1,1)
checkBoxShowHide[i]=QCheckBox("")
checkBoxShowHide[i].setChecked(1)
layout.addWidget(checkBoxShowHide[i],counter,7,1,1)
checkBoxShowHide[i].setLayoutDirection(Qt.RightToLeft)
checkBoxShowHide[i].stateChanged.connect(fun_3)
counter=counter+1
aclaration=QLabel("<b>*:</b> aclaration")
layout.addWidget(aclaration,counter,0,1,4)
aclaration.setWordWrap(True)
counter=counter+1
sepBar_3=QLabel("<b>======================================================================================================================</b>")
layout.addWidget(sepBar_3,counter,0,1,8)
counter=counter+1
okbox = QDialogButtonBox(dialog)
okbox.setOrientation(QtCore.Qt.Horizontal)
okbox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok)
layout.addWidget(okbox,counter,4,1,4)
dialog.show()
我尝试添加QScrollArea(),但没有成功