Qt Can';t从事件调用添加小部件

Qt Can';t从事件调用添加小部件,qt,python-2.7,pyqt,pyside,Qt,Python 2.7,Pyqt,Pyside,我想在事件期间添加一个按钮,但由于某些原因,它不起作用 如果我运行这段代码,TempFunc函数将在创建过程中运行,并将创建一个按钮 from PySide.QtGui import * from PySide.QtCore import * import sys import math class Example(QWidget): def __init__(self, val): super(Example,self).__init__() self.sc

我想在事件期间添加一个按钮,但由于某些原因,它不起作用

如果我运行这段代码,TempFunc函数将在创建过程中运行,并将创建一个按钮

from PySide.QtGui import *
from PySide.QtCore import *
import sys
import math

class Example(QWidget):
   def __init__(self, val):
       super(Example,self).__init__()
       self.scrollAreaConstraint = QLabel()
       self.scrollAreaConstraint.setFixedSize(QSize(400,400))
       self.scroll = QScrollArea()
       self.scroll.setWidget(self.scrollAreaConstraint)
       self.scroll.setWidgetResizable(True) 
       layout = QVBoxLayout(self)
       layout.addWidget(self.scroll)

       self.CountSlider = QSlider()
       self.CountSlider.setOrientation(Qt.Orientation(1))
       layout.addWidget(self.CountSlider)
       self.TempFunc() #THIS WILL CREATE THE BUTTON!!


   def TempFunc(self):
       print "SLIDER PRESSED!!! NOW I WILL ADD A BUTTON"
       QPushButton(self.scrollAreaConstraint)

if __name__ == '__main__':

   import sys
   app = QApplication(sys.argv)
   window = Example(25)
   window.setGeometry(500, 500, 500, 400)
   window.show()
   sys.exit(app.exec_())
但是,运行此功能时,按下滑块将导致运行相同的TempFunc函数,但不会创建按钮

from PySide.QtGui import *
from PySide.QtCore import *
import sys
import math

class Example(QWidget):
   def __init__(self, val):
       super(Example,self).__init__()
       self.scrollAreaConstraint = QLabel()
       self.scrollAreaConstraint.setFixedSize(QSize(400,400))
       self.scroll = QScrollArea()
       self.scroll.setWidget(self.scrollAreaConstraint)
       self.scroll.setWidgetResizable(True) 
       layout = QVBoxLayout(self)
       layout.addWidget(self.scroll)

       self.CountSlider = QSlider()
       self.CountSlider.setOrientation(Qt.Orientation(1))
       layout.addWidget(self.CountSlider)
       #self.TempFunc() #<----Disabled!!
       self.CountSlider.sliderPressed.connect(self.TempFunc)


   def TempFunc(self):
       print "SLIDER PRESSED!!! NOW I WILL ADD A BUTTON"
       QPushButton(self.scrollAreaConstraint)

if __name__ == '__main__':

   import sys
   app = QApplication(sys.argv)
   window = Example(25)
   window.setGeometry(500, 500, 500, 400)
   window.show()
   sys.exit(app.exec_())
从PySide.QtGui导入*
从PySide.QtCore导入*
导入系统
输入数学
类示例(QWidget):
定义初始值(self,val):
super(例如,self)。\uuuuu init\uuuuuuuu()
self.scrollAreaConstraint=QLabel()
self.scrollAreaConstraint.setFixedSize(QSize(400400))
self.scroll=QScrollArea()
self.scroll.setWidget(self.scrollAreaConstraint)
self.scroll.setWidgetResizeable(True)
布局=QVBoxLayout(自身)
layout.addWidget(self.scroll)
self.CountSlider=QSlider()
self.CountSlider.setOrientation(Qt.Orientation(1))
layout.addWidget(self.CountSlider)

#self.TempFunc()#按钮已创建,但随后您的代码对它没有任何用处,这解释了为什么它“不起作用”

我猜,由于您将
scrollAreaConstraint
设为这些按钮的父按钮,因此您希望它们出现在滚动区域内。但是
scrollAreaConstraint
是一个
QLabel
,它不能充当其他小部件的容器

因此,将
scrollAreaConstraint
a
QWidget
,给它一个布局,并将按钮添加到该布局中:

        self.scrollAreaConstraint = QWidget()
        self.scrollAreaConstraint.setLayout(QVBoxLayout())
        ...

    def TempFunc(self):
        button = QPushButton(self.scrollAreaConstraint)
        self.scrollAreaConstraint.layout().addWidget(button)

我最终发现QT会默认将.visible标志设置为false。 因此,只要将其设置为true,两种情况下按钮都可见

当从init函数调用它时,仍然不确定它是如何工作的以及为什么工作的,因为它们也被设置为visible(false)