منطقة التمرير لإعداد Python PyQt
-
21-12-2019 - |
سؤال
أحاول أن أجعل بلدي QGroupBox
قابلة للتمرير بمجرد أن تنمو أعلى من 400 بكسل.المحتويات الموجودة في QGroupBox
يتم إنشاؤها باستخدام حلقة.وهذا مثال على كيفية القيام بذلك.
mygroupbox = QtGui.QGroupBox('this is my groupbox')
myform = QtGui.QFormLayout()
labellist = []
combolist = []
for i in range(val):
labellist.append(QtGui.QLabel('mylabel'))
combolist.append(QtGui.QComboBox())
myform.addRow(labellist[i],combolist[i])
mygroupbox.setLayout(myform)
منذ قيمة val
يعتمد على بعض العوامل الأخرى، myform
لا يمكن تحديد حجم التخطيط.من أجل حل هذه المشكلة، أضفت أ QScrollableArea
مثله.
scroll = QtGui.QScrollableArea()
scroll.setWidget(mygroupbox)
scroll.setWidgetResizable(True)
scroll.setFixedHeight(400)
لسوء الحظ، لا يبدو أن هذا له أي تأثير على صندوق المجموعة.لا توجد علامة على شريط التمرير.هل أنا في عداد المفقودين شيئا؟
المحلول
بخلاف الخطأ المطبعي الواضح (أنا متأكد من أنك تقصد QScrollArea
)، لا أرى أي خطأ فيما نشرته.لذلك يجب أن تكمن المشكلة في مكان آخر في التعليمات البرمجية الخاصة بك:تخطيط مفقود ربما؟
فقط للتأكد من أننا على نفس الصفحة، يعمل هذا البرنامج النصي البسيط كما هو متوقع بالنسبة لي:
from PyQt4 import QtGui
class Window(QtGui.QWidget):
def __init__(self, val):
QtGui.QWidget.__init__(self)
mygroupbox = QtGui.QGroupBox('this is my groupbox')
myform = QtGui.QFormLayout()
labellist = []
combolist = []
for i in range(val):
labellist.append(QtGui.QLabel('mylabel'))
combolist.append(QtGui.QComboBox())
myform.addRow(labellist[i],combolist[i])
mygroupbox.setLayout(myform)
scroll = QtGui.QScrollArea()
scroll.setWidget(mygroupbox)
scroll.setWidgetResizable(True)
scroll.setFixedHeight(400)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(scroll)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window(25)
window.setGeometry(500, 300, 300, 400)
window.show()
sys.exit(app.exec_())
لا تنتمي إلى StackOverflow