2016-12-20 2 views
0

Я несколько опытный в python, но это было время looooong, так что несите со мной на этом.добавление QWidgets для прокруткиArea заставляет их накапливаться на вершине eachother

Хорошо, поэтому я нашел этот действительно отличный пример кода PyQt, когда парень нажимает кнопки на область прокрутки, которая автоматически запускает полосу прокрутки при переполнении содержимого (кнопок).

Так что я пошел и попытался сделать ту же самую вещь, но толкающие виджеты в области прокрутки, это мой код:

#!/usr/bin/env python 
#-*- coding:utf-8 -*- 

from PyQt4 import QtCore, QtGui 

class myDialog(QtGui.QWidget): 
    _buttons = 0 
    def __init__(self, parent=None): 
     super(myDialog, self).__init__(parent) 

     self.setGeometry(50, 50, 500, 500) 

     self.pushButton = QtGui.QPushButton(self) 
     self.pushButton.setText(QtGui.QApplication.translate("self", "Add Button!", None, QtGui.QApplication.UnicodeUTF8)) 
     self.pushButton.clicked.connect(self.on_pushButton_clicked) 

     self.scrollArea = QtGui.QScrollArea(self) 
     self.scrollArea.setWidgetResizable(True) 

     self.scrollAreaWidgetContents = QtGui.QWidget(self.scrollArea) 
     self.scrollArea.setWidget(self.scrollAreaWidgetContents) 

     self.verticalLayout = QtGui.QVBoxLayout(self) 
     self.verticalLayout.addWidget(self.pushButton) 
     self.verticalLayout.addWidget(self.scrollArea) 

     self.verticalLayoutScroll = QtGui.QVBoxLayout(self.scrollAreaWidgetContents) 


    @QtCore.pyqtSlot() 
    def on_pushButton_clicked(self): 
     self._buttons += 1 
     pustButtonName = u"Button {0}".format(self._buttons) 

     #pushButton = QtGui.QPushButton(self.scrollAreaWidgetContents) 
     #pushButton.setText(pustButtonName) 
     muhAlarma = AlarmaWidget(self.scrollAreaWidgetContents) 

     self.verticalLayoutScroll.addWidget(muhAlarma) 


class AlarmaWidget(QtGui.QWidget): 
    def __init__(self, parent): 
     super(AlarmaWidget, self).__init__(parent) 
     #self.setGeometry(0,0, 30, 30) 


     theButton = QtGui.QPushButton(self) 
     theButton.setText("It's Friday my dudes.") 



if __name__ == "__main__": 
    import sys 

    app = QtGui.QApplication(sys.argv) 

    main = myDialog() 

    #main.setWindowFlags(QtCore.Qt.FramelessWindowHint) 
    #main.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) 

    #main.showFullScreen() 
    main.show() 

    sys.exit(app.exec_()) 

После выполнения этого кода и нажатия кнопки, кнопки начнут появляться. Однако большая проблема заключается в том, что вместо заполнения полосы прокрутки и включения полосы прокрутки кнопки просто заканчиваются наложением друг на друга, почему?

PS: раскомментировав закомментированные КНОПКА линии и комментируя muhAlarma линия сделает этот пример работы снова. Однако мне нужно нажимать пользовательские виджеты, а не кнопки.

Заранее спасибо

ответ

0

Ладно я нашел решение после того, как почти сходит с ума на некоторое время. Если у кого-то есть аналогичная проблема, у меня есть твоя спина!

в

AlarmaWidget.__init__ 

установить minimunHeight следующим образом:

self.setMinimumHeight(50) 
1

Добавление QWidgets (QPushButton) к ScrollArea. Это пример кода для вставки QWidgets (QPushButton) в scrollArea. Пожалуйста, проверьте этот код. Ожидаете ли вы этого результата, Если вы этого не ожидаете, извините. Спасибо, Субин

import sys 
from PyQt4 import QtGui 
from PyQt4 import QtCore 

class myDialog (QtGui.QWidget): 

    def __init__(self, parent=None): 
     super(myDialog, self).__init__(parent) 

     self.button = QtGui.QPushButton (self) 
     self.button.setObjectName ('button') 
     self.button.setText ('Add Button')   

     self.scrollArea = QtGui.QScrollArea (self) 
     self.scrollArea.setWidgetResizable (True) 
     self.scrollArea.setObjectName('scrollArea') 

     self.scrollAreaWidgetContents = QtGui.QWidget() 
     self.scrollAreaWidgetContents.setObjectName('scrollAreaWidgetContents') 
     self.scrollArea.setWidget(self.scrollAreaWidgetContents) 

     self.verticalLayout = QtGui.QVBoxLayout (self) 
     self.verticalLayout.setObjectName ('verticalLayout')   

     self.verticalLayout.addWidget(self.button) 
     self.verticalLayout.addWidget (self.scrollArea)   

     self.verticalLayout_scroll = QtGui.QVBoxLayout (self.scrollAreaWidgetContents) 
     self.verticalLayout_scroll.setObjectName ('verticalLayout_scroll') 

     self.button.clicked.connect (self.createButtons) 

     self.resize(250, 330) 


    def createButtons (self) :   
     existsButtonList = []   
     for loop in range (self.verticalLayout_scroll.count()) : 
      if type(self.verticalLayout_scroll.itemAt(loop).widget())==QtGui.QPushButton : 
       existsButtonList.append (self.verticalLayout_scroll.itemAt(loop).widget())   

     button_custom = QtGui.QPushButton (self) 
     button_custom.setObjectName ('button%s'% str(len(existsButtonList)+1)) 
     button_custom.setText ('Add Button - %s'% str(len(existsButtonList)+1))  

     self.verticalLayout_scroll.addWidget(button_custom) 


if __name__=='__main__': 
    app = QtGui.QApplication(sys.argv) 
    widget = myDialog() 
    widget.show() 
    app.exec_()   
+0

Я сказал пользовательские виджеты * не кнопки *, хотя ... – DeadlyBacon

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