سؤال

أحاول أن أجعل بلدي 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_())
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top