Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PyQt中编辑/添加表单中的数据??(Python)_Python_Pyqt_Pyqt4 - Fatal编程技术网

如何在PyQt中编辑/添加表单中的数据??(Python)

如何在PyQt中编辑/添加表单中的数据??(Python),python,pyqt,pyqt4,Python,Pyqt,Pyqt4,使用下面的代码,我创建了一个表单来保存不同的问题,用于选择和添加到测试中。我想知道如何将数据(问题)添加到表单(顶部框)(假设我想添加一个单独的问题,这是一个命名变量“问题”),我将如何执行此操作???此外,虽然我知道如何将数据(我指的是文本)添加到底部框中,但是否有某种方式可以让我在顶部框中选择一段文本,并在底部框中查看文本/变量的扩展,而无需单击任何按钮 代码如下: import sys, random, time, math, re from PyQt4 import QtGui, QtC

使用下面的代码,我创建了一个表单来保存不同的问题,用于选择和添加到测试中。我想知道如何将数据(问题)添加到表单(顶部框)(假设我想添加一个单独的问题,这是一个命名变量“问题”),我将如何执行此操作???此外,虽然我知道如何将数据(我指的是文本)添加到底部框中,但是否有某种方式可以让我在顶部框中选择一段文本,并在底部框中查看文本/变量的扩展,而无需单击任何按钮

代码如下:

import sys, random, time, math, re
from PyQt4 import QtGui, QtCore

class AddTst(QtGui.QWidget):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(464, 409)
        self.verticalLayout_2 = QtGui.QVBoxLayout(Form)
        self.horizontalLayout = QtGui.QHBoxLayout()
        self.listView = QtGui.QListView(Form)
        self.horizontalLayout.addWidget(self.listView)
        self.verticalLayout = QtGui.QVBoxLayout()
        self.EditButton = QtGui.QPushButton(Form)
        self.verticalLayout.addWidget(self.EditButton)
        self.DeleteButton = QtGui.QPushButton(Form)
        self.verticalLayout.addWidget(self.DeleteButton)
        spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
        self.verticalLayout.addItem(spacerItem)
        self.AddButton = QtGui.QPushButton(Form)
        self.verticalLayout.addWidget(self.AddButton)
        self.horizontalLayout.addLayout(self.verticalLayout)
        self.verticalLayout_2.addLayout(self.horizontalLayout)
        self.textBrowser = QtGui.QTextBrowser(Form)
        self.verticalLayout_2.addWidget(self.textBrowser)
        self.textBrowser.setPlainText('Hello')

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        self.EditButton.setText(QtGui.QApplication.translate("Form", "Edit", None, QtGui.QApplication.UnicodeUTF8))
        self.DeleteButton.setText(QtGui.QApplication.translate("Form", "Delete", None, QtGui.QApplication.UnicodeUTF8))
        self.AddButton.setText(QtGui.QApplication.translate("Form", "Add", None, QtGui.QApplication.UnicodeUTF8))

class AddTest(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = AddTst()
        self.ui.setupUi(self)
    def execute_event(self):
        pass
    def execute_all_event(self):
        pass
    def reload_event(self):
        pass

def main():
    app = QtGui.QApplication(sys.argv)
    ex = AddTest()
    ex.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

要回答有关如何将列表项与文本框链接的特定问题,请连接到适当的信号,以便在当前列表项更改时填充文本框

但在处理这个问题之前,还有更重要的事情要处理。看起来您已经使用Qt设计器创建了表单,然后使用pyuic生成了一个gui模块。但是,您随后犯了直接编辑此模块的错误。这是一个坏主意,因为当您更改表单时,当您必须重新生成gui模块时,您将丢失所有内容

正确的方法是将gui模块导入主应用程序,如下所示:

from PyQt4 import QtCore, QtGui
from mainwindow_ui import Ui_MainWindow

class Window(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.listWidget.currentRowChanged.connect(self.handleRowChanged)

    def handleRowChanged(self, row):
        item = self.ui.listWidget.item(row)
        # do stuff with list-item...

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())
这假设您已经生成了一个名为
mainwindow\u ui.py
的gui文件,并且您的主应用程序脚本保存在同一目录中。还要注意,我使用了一个而不是
QListView
,以及一个而不是
QWidget
。我建议您进行类似的更改,因为这将简化应用程序的开发

还有几件事需要考虑:

  • 您当前正在使用文本浏览器显示内容,但此小部件是只读的。A可能是更好的选择
  • 目前无法添加/编辑每个项目的名称/标题。您可以为此在文本框上方添加一个
  • 源数据的格式是什么,如何加载/保存?如果您还没有完成这一部分,您应该尽快完成,因为这可能会对应用程序的总体设计产生很大影响

感谢您的回复,这有助于我更好地了解我到底在做什么。在数据源方面,我使用SQL数据库导入表格中要显示的部分,然后在选择数据和按钮后可以修改表格。