我在python中有点有点但是这是一个漫长的时间,所以请耐心等待。
好的,所以我发现这个非常好的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:取消注释注释 pushButton 行并注释 muhAlarma 行将使该示例再次起作用。但是我需要推送自定义小部件,而不是按钮。
提前致谢
答案 0 :(得分:1)
将QWidgets(QPushButton)添加到scrollArea。 这是插入QWidgets(QPushButton)到scrollArea的示例代码。 请检查此代码。你期待这个结果吗? 如果您不期待这个答案,抱歉。 谢谢,Subin
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_()
答案 1 :(得分:0)
好的,我已经找到一个解决方案,几乎疯了很长一段时间。 如果有人遇到类似问题,我已经退缩了!
in
...
2016-12-20--09-59-13
2016-12-20--09-59-11
2016-12-20--09-59-14
folders: 86
设置 minimunHeight ,如下所示:
AlarmaWidget.__init__