单击按钮后是否可以添加 2 个新的输入字段?
Is it possible to add 2 new input fields after clicking a button?
所以目前我正在学习 Python PyQt5。
我目前的项目是一个非常简单的数据库,将数据保存在 CSV 文件中。
我的项目的工作方式是。
您将为您的“数据库”命名并保存。
通过单击按钮,您将在数据库中添加 1 个新列和 2 个新输入字段
- 输入字段 1 - 在这里您将为新列创建一个名称
- 输入字段 2 - 在这里您将写入您的 text/numbers(数据),这些数据将被添加到数据库中
-> 图形演示的小尝试
-
- (点击添加列 -> 第 1 列)
- (点击按钮 -> 第 1 列第 2 列)
- (点击添加列 -> 列 1 列 2)
- (单击按钮 -> 第 1 列第 2 列第 3 列)
- 命名列并在数据部分添加一些文本后,您将单击两个按钮之一
- 如果您决定更改名称,一个按钮将重命名您的列
- 第二个将从输入字段中收集所有数据并将它们添加到数据库中
- 保存您的数据库以便稍后打开它
所以我现在的问题是我不知道如何创建步骤 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)
您可以在此函数中编写逻辑来创建新列
所以目前我正在学习 Python PyQt5。
我目前的项目是一个非常简单的数据库,将数据保存在 CSV 文件中。
我的项目的工作方式是。
您将为您的“数据库”命名并保存。
通过单击按钮,您将在数据库中添加 1 个新列和 2 个新输入字段
- 输入字段 1 - 在这里您将为新列创建一个名称
- 输入字段 2 - 在这里您将写入您的 text/numbers(数据),这些数据将被添加到数据库中
-> 图形演示的小尝试 -
- (点击添加列 -> 第 1 列)
- (点击按钮 -> 第 1 列第 2 列)
- (点击添加列 -> 列 1 列 2)
- (单击按钮 -> 第 1 列第 2 列第 3 列)
- 命名列并在数据部分添加一些文本后,您将单击两个按钮之一
- 如果您决定更改名称,一个按钮将重命名您的列
- 第二个将从输入字段中收集所有数据并将它们添加到数据库中
- 保存您的数据库以便稍后打开它
所以我现在的问题是我不知道如何创建步骤 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)
您可以在此函数中编写逻辑来创建新列