PyQt:动态添加QPushButton

6

我正在尝试通过按下另一个QPushButton来创建QPushButton,以便最终可以动态创建按钮。似乎在函数中创建按钮的初始方法不起作用。

import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QLabel, QGridLayout, QWidget
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtCore import QSize   



class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)


    self.setMinimumSize(QSize(300, 200))    

    pybutton = QPushButton('Create a button', self)
    pybutton.clicked.connect(self.clickMethod)
    pybutton.resize(100,100)
    pybutton.move(100, 100)        

def clickMethod(self):
    print('Clicked')
    newBtn = QPushButton('New Button', self)
    newBtn.move(0, 0)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainWin = MainWindow()
    mainWin.show()
    sys.exit( app.exec_() )
2个回答

8

当窗口被显示时,它会调用其子元素的 show() 方法,因此子元素才会可见。如果您想让后添加的按钮可见,您必须调用按钮的 show() 方法。

def clickMethod(self):
    print('Clicked')
    newBtn = QPushButton('New Button', self)
    newBtn.move(0, 0)
    newBtn.show()

enter image description here


0
你只需要使用show()函数, 但最好将其放在列表中以便稍后控制,像这样:
import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QLabel, QGridLayout, QWidget
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtCore import QSize   



class MainWindow(QMainWindow):
    def __init__(self):
     QMainWindow.__init__(self)
     self.i=0
     self.y=0
     self.btn=[]
     self.setMinimumSize(QSize(300, 200))    
 
     pybutton = QPushButton('Create a button', self)
     pybutton.clicked.connect(self.clickMethod)
     pybutton.resize(100,100)
     pybutton.move(100, 100)        

    def clickMethod(self):
     print('Clicked')
     self.btn.append( QPushButton('New Button', self))
     
     self.btn[-1].move(self.i, self.y)
     self.i=self.i+50
     self.y=self.y+50
     self.btn[-1].show()


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainWin = MainWindow()
    mainWin.show()
    sys.exit( app.exec_() )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接