2016-07-11 3 views
1

Я пишу приложение, которое динамически добавляет и удаляет виджеты на QScrollView. Код ниже, используя Qt3 и python, даст мне динамические виджеты, но когда я добавлю слишком много, чтобы их можно было увидеть, ни одна полоса прокрутки не появляется. Он еще не прокручивается. Я разместил соответствующие фрагменты кода ниже.Как добавить виджеты в QScrollView с Python

Любые ответы должны быть в Qt3, потому что моя компания использует только Qt3. Я новичок в программировании и Qt в целом.

PL = parser.Plist() 

class EC_Conf_App(QDialog): 

def __init__(self,parent = None,name = None,modal = 0,fl = 0): 
    QDialog.__init__(self,parent,name,modal,fl) 

    self.gridLayout = QGridLayout(self)   
    self.scrollArea = QScrollView(self)   
    self.scrollArea.setGeometry(0, 0, 369, 286)    
    self.Form1Layout = QGridLayout(self.scrollArea)   
    self.gridLayout.addWidget(self.scrollArea, 0, 0) 

    for item in PL.plist: 
     self.section_create(item.name, item.variables) 

def section_create(self, name, variables): 


    # ADD ROW BUTTON 
    for key, value in sorted(variables.iteritems()): 
     if len(value) > 3: # if there is more than one option for the combobox 
      self.addButton = QPushButton(self.scrollArea, name + '_AddButton') 


      self.addButton.setText('Add Row') 
      self.Form1Layout.addWidget(self.addButton, self.Ay, self.Ax) 
      self.addButton.show()     
      self.connect(self.addButton,SIGNAL("clicked()"),self.add_rows) 

def add_rows(self): 
    self.addButton = self.sender() 
    self.addButton.name() 
    copy_class = self.addButton.name() 
    clean_name = copy_class[:-10] 
    for item in PL.plist: 
     if item.name == clean_name: 
      PL.insert(item.name, item.heading, item.variables) 
      self.remove_widgets() 
      break 

def remove_widgets(self): 
    for item in self.widgets: 
     item.deleteLater() 
     self.Form1Layout.remove(item)    

    self.construct() 

def construct(self): 
    for item in PL.plist: 
     self.section_create(item.name, item.variables) 

ответ

0

Единственный способ использовать макет с QScrollView, чтобы установить расположение на его viewport(), а не самого представления. Это documented.

Заменить self.Form1Layout = QGridLayout(self.scrollArea) с

self.Form1Layout = QGridLayout(self.scrollArea.viewport()) 

This question сделок с той же проблемой для Qt4/5.

+0

Спасибо! Теперь, когда у меня есть .viewport() с моим макетом и с каждым созданием виджета (self.mainLabel = QLabel (self.scrollArea.viewport(), имя + '_MainLabel'), я все еще не получаю полосу прокрутки Я знаю ссылку, которую вы указали, но мне трудно понять ее, потому что она находится на C. –

Смежные вопросы