如何使用PyQt4 GUI编辑yaml文件

时间:2014-09-23 21:39:52

标签: python user-interface pyqt4 yaml

所以我正在尝试创建一个简单的GUI,它接受一个yaml文件并通过PyQT编辑它。 让我们说yaml包含{example:“Helloworld”}

我甚至无法在GUI框中显示yaml。

所以我有用python编写的GUI文本框:

import yaml
import sys
from PyQt4 import QtGui, QtCore

class GUI(QtGui.QWidget):

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

    def initUI(self):      

        msg = QtGui.Qlabel("This is a test message")
        self.msg.move(60, 20)

        self.addedLine = QtGui.QLabel(self)
        textBox = QtGui.QLineEdit(self)

        textBox.move(60, 100)
        self.addedLine.move(60, 40)

        textBox.textChanged[str].connect(self.onChanged)

        self.setGeometry(500, 500, 500, 500)
        self.setWindowTitle('QtGui.QLineEdit')
        self.show()

    def onChanged(self, text):

        self.addedLine.setText(text)
        self.addedLine.adjustSize()        

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

if __name__ == '__main__':
    main()

这只是一个显示yaml数据的简单函数

def displayYaml():
    yamlDoc = open("yaml.yml",'r')
    data = yaml.load(yamlDoc)
    yamlDoc.close()
    prettyData = yaml.dump(data, default_flow_style=False)
    return prettyData 

那么我可以将这个displayYaml函数添加到GUI类吗?或者我必须将其作为单独的文件并导入它?我尝试了没有该函数的displayYaml代码,并尝试将其直接写入initUI,但这不起作用,我收到错误:

UnboundLocalError: local variable 'yaml' referenced before assignment

最后我想要它 1.显示yaml doc。这将是一条固定的消息行。 2.有一个单独的消息行和文本更改框,我已经这样做了 3.使用textchange框中的输入覆盖yaml doc。

1 个答案:

答案 0 :(得分:2)

import sys, yaml
from PyQt4 import QtGui, QtCore

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()
        self.verticalLayout = QtGui.QVBoxLayout()
        self.plainTextEdit = QtGui.QPlainTextEdit()
        self.verticalLayout.addWidget(self.plainTextEdit)
        self.pushButton = QtGui.QPushButton("Load Yaml")
        self.verticalLayout.addWidget(self.pushButton)
        self.setLayout(self.verticalLayout)
        self.pushButton.clicked.connect(self.loadYaml)

    def loadYaml(self):
        fileName = str(QtGui.QFileDialog.getOpenFileName(self, "Open File","/home/some/folder","Yaml(*.yaml);;AllFiles(*.*)"))
        f = open(fileName)
        getData = yaml.safe_load(f)
        prettyData = yaml.dump(getData, default_flow_style=False)
        self.plainTextEdit.appendPlainText(str(prettyData))

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


if __name__ == '__main__':
    main()

试试此代码