【问题标题】:Clicking a button to create a new button using PyQt5 python [duplicate]单击一个按钮以使用 PyQt5 python 创建一个新按钮 [重复]
【发布时间】:2019-10-20 09:19:40
【问题描述】:

我正在尝试创建一个使用 pythonPyQt5 实现按钮单击操作的窗口 (UI)。但是,我希望我的按钮在单击时创建一个新按钮。 (即:单击按钮以创建新按钮)。有人可以通知我如何做到这一点吗?我的示例代码如下:

    from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
    from PyQt5.QtGui import QIcon
    from PyQt5.QtCore import pyqtSlot
    import sys

    class App(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("my window")
        self.setGeometry(100, 100, 320, 200)

        #creating a button to be clicked
        button1 = QPushButton('Button-1', self)
        button1.move(100, 70)


        #calling a function on_click upon clicking button1, i want this function to create a new button named button2
        button.clicked.connect(self.on_click)
        self.show()

    @pyqtSlot()
    def on_click(self):
        print('Button-2 will be created')
        button2 = QPushButton('Button-2', self)
        button2.move(100, 200)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

我希望我的函数 on_click(self) 创建一个新按钮:但我不能。我错过了什么吗?

【问题讨论】:

    标签: python python-3.x user-interface pyqt5


    【解决方案1】:

    您需要将button.clicked.connect (self.on_click) 替换为button1.clicked.connect (self.on_click)。 并添加button2.show ()

    import sys
    from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
    from PyQt5.QtGui import QIcon
    from PyQt5.QtCore import pyqtSlot
    
    
    class App(QWidget):
        def __init__(self):
            super().__init__()
            self.initUI()
    
        def initUI(self):
            self.setWindowTitle("my window")
            self.setGeometry(100, 100, 320, 300)
    
            #creating a button to be clicked
            button1 = QPushButton('Button-1', self)
            button1.move(100, 70)
            button1.clicked.connect(self.on_click)      # button1
    
        @pyqtSlot()
        def on_click(self):
            print('Button-2 will be created')
            button2 = QPushButton('Button-2', self)
            button2.move(100, 200)
            button2.show()                              # +++
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = App()
        ex.show()
        sys.exit(app.exec_())
    


    或者使用布局:

    import sys
    from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
    from PyQt5.QtGui import QIcon
    from PyQt5.QtCore import pyqtSlot
    
    
    class App(QWidget):
        def __init__(self):
            super().__init__()
            self.initUI()
    
        def initUI(self):
            self.setWindowTitle("my window")
            self.num = 2
    
            #creating a button to be clicked
            button1 = QPushButton('Button-1', self)
    #        button1.move(100, 70)
            button1.clicked.connect(self.on_click)     
    
            self.layout = QVBoxLayout(self) 
            self.layout.addWidget(button1)        
    
        @pyqtSlot()
        def on_click(self):
            print('Button-{} will be created'.format(self.num))
            button2 = QPushButton('Button-{}'.format(self.num), self)
            button2.clicked.connect(lambda : print(button2.text()))
    #        button2.move(100, 200)
    
            self.layout.addWidget(button2)
            self.num += 1
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = App()
        ex.show()
        sys.exit(app.exec_())
    

    【讨论】:

    • 刚刚错过了 button2.show(),谢谢它解决了我的问题 S. Nick
    猜你喜欢
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    相关资源
    最近更新 更多