【问题标题】:How to insert a new layout widget when pressing button in PyQt5 [duplicate]在PyQt5中按下按钮时如何插入新的布局小部件[重复]
【发布时间】:2019-05-31 22:58:00
【问题描述】:

当我单击“self.normal_replace_btn”按钮时,如何插入新的行小部件布局?

import pandas as pd
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *


class Form(QDialog):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.normal_replace_btn = QPushButton('Add normal replace function')

        self.Add_btn_layout = QHBoxLayout()
        self.Add_btn_layout.addWidget(self.normal_replace_btn)

        self.normal_replace_btn.clicked.connect(self.insert_normal_textbox)

        self.confirm_btn = QPushButton('Confirm')
        self.button_layout = QHBoxLayout()
        self.button_layout.addWidget(self.confirm_btn, alignment=Qt.AlignRight)

        self.layout = QVBoxLayout()
        self.layout.addLayout(self.Add_btn_layout)

        self.layout.addLayout(self.insert_normal_textbox())
        self.layout.addLayout(self.button_layout)
        self.setLayout(self.layout)

        self.confirm_btn.clicked.connect(self.filter_data)

    def insert_normal_textbox(self):
        self.from_textBox = QLineEdit()
        row_1 = QLabel('To: ')
        self.to_textBox = QLineEdit()

        self.grid = QGridLayout()
        self.grid.addWidget(self.from_textBox, 0, 0)
        self.grid.addWidget(row_1, 0, 1)
        self.grid.addWidget(self.to_textBox, 0, 2)


app = QApplication(sys.argv)
form = Form()
form.show()
sys.exit(app.exec_())

下面是解释我的问题和结果的更多细节的图片

【问题讨论】:

    标签: python pyqt5


    【解决方案1】:

    试试看:

    import pandas as pd
    import sys
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import *
    
    
    class Form(QDialog):
        def __init__(self, parent=None):
            super().__init__(parent)
    
            self.normal_replace_btn = QPushButton('Add normal replace function')
    
            self.Add_btn_layout = QHBoxLayout()
            self.Add_btn_layout.addWidget(self.normal_replace_btn)
    
            self.normal_replace_btn.clicked.connect(self.insert_normal_textbox)
    
            self.confirm_btn = QPushButton('Confirm')
            self.button_layout = QHBoxLayout()
            self.button_layout.addWidget(self.confirm_btn, alignment=Qt.AlignRight)
    
            self.layout = QVBoxLayout()
            self.layout.addLayout(self.Add_btn_layout)
    
    #        self.layout.addLayout(self.insert_normal_textbox())  # ---
            self.layout.addLayout(self.button_layout)
            self.setLayout(self.layout)
    
            self.confirm_btn.clicked.connect(self.filter_data)
    
        def insert_normal_textbox(self):
            self.from_textBox = QLineEdit()
            row_1 = QLabel('To: ')
            self.to_textBox = QLineEdit()
    
            self.grid = QGridLayout()
            self.grid.addWidget(self.from_textBox, 0, 0)
            self.grid.addWidget(row_1, 0, 1)
            self.grid.addWidget(self.to_textBox, 0, 2)
    
            self.layout.addLayout(self.grid)                  # +++
    
        def filter_data(self):                                # +++
            print("def filter_data(self):")
    
    
    app = QApplication(sys.argv)
    form = Form()
    form.show()
    sys.exit(app.exec_())
    


    示例二:

    import sys
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore    import *
    
    class Form(QDialog):
        def __init__(self, parent=None):
            super().__init__(parent)
    
            self.normal_replace_btn = QPushButton('Add normal replace function')
    
            self.Add_btn_layout = QHBoxLayout()
            self.Add_btn_layout.addWidget(self.normal_replace_btn)
    
            self.normal_replace_btn.clicked.connect(self.insert_normal_textbox)
    
            self.confirm_btn = QPushButton('Confirm')
            self.button_layout = QHBoxLayout()
            self.button_layout.addWidget(self.confirm_btn, alignment=Qt.AlignRight)
    
            self.layout = QVBoxLayout()
            self.layout.addLayout(self.Add_btn_layout)
    
            self.layout.addLayout(self.button_layout)
            self.setLayout(self.layout)
    
            self.confirm_btn.clicked.connect(self.filter_data)
    
        def insert_normal_textbox(self):
            self.from_textBox = QLineEdit() 
            row_1 = QLabel('To: ')
            self.to_textBox = QLineEdit()   
    
            self.grid = QGridLayout()
            self.grid.addWidget(self.from_textBox, 0, 0)
            self.grid.addWidget(row_1, 0, 1)
            self.grid.addWidget(self.to_textBox, 0, 2)
            self.layout.addLayout(self.grid)                  
    
            self.printLineEdit()                                        # +++
    
        def printLineEdit(self):                                        # +++ 
            print("\nlayoutСount: {}\n".format(self.layout.count()))
            layoutСhildrens = self.layout.children()
            print("layoutСhildrens: {}\n".format(layoutСhildrens))
    
            for i, child in enumerate(layoutСhildrens[2:]):
                print(" line {}: --> {} ; {} ; {}"
                      "".format(i+1, 
                                child.itemAt(0).widget().text(),
                                child.itemAt(1).widget().text(),
                                child.itemAt(2).widget().text()
                               )
                      )
    
        def filter_data(self):                                
            print("\ndef filter_data(self):\n")
    
    
    app = QApplication(sys.argv)
    form = Form()
    form.show()
    sys.exit(app.exec_())
    

    【讨论】:

    • 如果您插入两个以上的新行 QLineEdit(),我如何获取输入字段?或者我如何计算有多少 QLineEdit()?
    • 我需要你的例子,你试图得到QLineEdit这一行,你不能做什么。但这是另一个问题的话题!尝试查看我在第二个示例中插入的printLineEdit 方法。
    猜你喜欢
    • 2018-01-11
    • 2021-07-25
    • 2021-05-24
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 2013-11-28
    相关资源
    最近更新 更多