单击按钮后是否可以添加 2 个新的输入字段?

Is it possible to add 2 new input fields after clicking a button?

所以目前我正在学习 Python PyQt5。

我目前的项目是一个非常简单的数据库,将数据保存在 CSV 文件中。

我的项目的工作方式是。

  1. 您将为您的“数据库”命名并保存。

  2. 通过单击按钮,您将在数据库中添加 1 个新列和 2 个新输入字段

    • 输入字段 1 - 在这里您将为新列创建一个名称
    • 输入字段 2 - 在这里您将写入您的 text/numbers(数据),这些数据将被添加到数据库中

    -> 图形演示的小尝试 -

  1. 命名列并在数据部分添加一些文本后,您将单击两个按钮之一
    • 如果您决定更改名称,一个按钮将重命名您的列
    • 第二个将从输入字段中收集所有数据并将它们添加到数据库中
  2. 保存您的数据库以便稍后打开它

所以我现在的问题是我不知道如何创建步骤 2)。 我尝试使用List然后循环遍历它来显示,但我不知道如何创建它。

所以我要求 help.Shoudl 我放弃这个方法?或者有更好的方法吗? 我创建它不是为了出售它,我创建它仅供个人使用。 另外,对于写得不好和可读性差的代码,我深表歉意,我是 Python 和整体编程的新手

from PyQt5 import QtWidgets, QtGui, QtCore, Qt
import sys, os
import pandas as pD
import csv

class Window(QtWidgets.QMainWindow):

  def __init__(self, **kwargs):
        super(Window, self).__init__(**kwargs)
                
        self.setWindowTitle('Databáze')
        self.init_GUI()
        self.show()
        
    def init_GUI(self):
               
        database = QtWidgets.QWidget()
        database_Layout = QtWidgets.QVBoxLayout()
        database.setLayout(database_Layout)
        self.setCentralWidget(database)
        
        self.createUI(database_Layout)
    
    def createUI(self, database_Layout):
        
        fileHandling_Layout = QtWidgets.QHBoxLayout()
        editableEntries_Layout = QtWidgets.QHBoxLayout()
        table_Layout = QtWidgets.QVBoxLayout()
        
        self.fileName_Label = QtWidgets.QLabel('Název souboru: ')
        self.fileName_Label.setFont(QtGui.QFont('Arial',15))
        self.fileName_Label.setAlignment(QtCore.Qt.AlignCenter)
        
        self.fileName_edit_TEXT = QtWidgets.QLineEdit()
        self.fileName_edit_TEXT.setFont(QtGui.QFont('Arial',13))
        self.fileName_edit_TEXT.setAlignment(QtCore.Qt.AlignLeft)
        
        self.saveFile_Button = QtWidgets.QPushButton('Uložit jako')
        self.saveFile_Button.setFont(QtGui.QFont('Arial',10))
        self.saveFile_Button.setFixedSize(90,40)
        
        self.openFile_Button = QtWidgets.QPushButton('Otevřít soubor')
        self.openFile_Button.setFont(QtGui.QFont('Arial',10))
        self.openFile_Button.setFixedSize(90,40)
        
        fileHandling_Layout.addWidget(self.fileName_Label)
        fileHandling_Layout.addWidget(self.fileName_edit_TEXT)
        fileHandling_Layout.addWidget(self.saveFile_Button)
        fileHandling_Layout.addWidget(self.openFile_Button)
 
        #ADD NEW INPUT FIELDS ( ADDS NEW COLUMN INTO DATABASE )
        self.addNewEntrie_Button = QtWidgets.QPushButton('Nový prvek')
        self.addNewEntrie_Button.setFont(QtGui.QFont('Arial',10))
        self.addNewEntrie_Button.setFixedSize(80,40)
        self.addNewEntrie_Button.setStyleSheet("background-color : lightBlue")

        editableEntries_Layout.addWidget(self.addNewEntrie_Button)

        newEntrie_Layout = QtWidgets.QVBoxLayout()
        
        #COLUMN NAME
        self.column_Name_Edit_TEXT = QtWidgets.QLineEdit()
        self.column_Name_Edit_TEXT.setFont(QtGui.QFont('Arial',15))
        self.column_Name_Edit_TEXT.setAlignment(QtCore.Qt.AlignLeft)
        self.column_Name_Edit_TEXT.setFixedSize(150,30)
        
        #DATA TO PUT INTO ROW
        self.row_Data_EDIT_TEXT = QtWidgets.QLineEdit()
        self.row_Data_EDIT_TEXT.setFont(QtGui.QFont('Arial',13))
        self.row_Data_EDIT_TEXT.setAlignment(QtCore.Qt.AlignLeft)
        self.row_Data_EDIT_TEXT.setFixedSize(150,25)

        newEntrie_Layout.addWidget(self.column_Name_Edit_TEXT)
        newEntrie_Layout.addWidget(self.row_Data_EDIT_TEXT)
        
        newlyCreatedEntrie_Layout = QtWidgets.QHBoxLayout()
        
        newlyCreatedEntrie_Layout.addLayout(newEntrie_Layout)
        
        editableEntries_Layout.addLayout(newlyCreatedEntrie_Layout)
        
        entries_Buttons_Layout = QtWidgets.QVBoxLayout()
        self.renameColumn_Button = QtWidgets.QPushButton('Přejmenuj sloupec')
        self.renameColumn_Button.setFont(QtGui.QFont('Arial',10))
        self.renameColumn_Button.setFixedSize(115,40)
        self.renameColumn_Button.setStyleSheet("background-color : lightBlue")
        
        self.addData_Button = QtWidgets.QPushButton('Přidej data')
        self.addData_Button.setFont(QtGui.QFont('Arial',10))
        self.addData_Button.setFixedSize(115,40)
        self.addData_Button.setStyleSheet("background-color : lightBlue")
        
        entries_Buttons_Layout.addWidget(self.renameColumn_Button)
        entries_Buttons_Layout.addWidget(self.addData_Button)
        editableEntries_Layout.addLayout(entries_Buttons_Layout)

        self.table_Database = QtWidgets.QTableWidget()
        table_Layout.addWidget(self.table_Database)
        
        database_Layout.addLayout(fileHandling_Layout)
        database_Layout.addLayout(editableEntries_Layout)
        database_Layout.addLayout(table_Layout)
    
        
aplikace = QtWidgets.QApplication(sys.argv)
okno = Window()
sys.exit(aplikace.exec_())

是的,可以动态创建小部件,然后将它们添加到您的布局中。 最简单的形式:

buttonToClick = QPushButton()
self.mainLayout = QVBoxLayout()
buttonToClick.clicked.connect(self.buttonClicked)

def buttonClicked(self):
    inputField1 = QLineEdit()
    inputField2 = QLineEdit()
    self.mainLayout.addWidget(inputField1)
    self.mainLayout.addWidget(inputField2)

您可以在此函数中编写逻辑来创建新列