所以我正在尝试创建一个简单的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。
答案 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()
试试此代码