Kir*_*Soo 1 python user-interface yaml pyqt4
因此,我尝试创建一个简单的 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()
Run Code Online (Sandbox Code Playgroud)
这只是一个用于显示 yaml 数据的简单函数
def displayYaml():
yamlDoc = open("yaml.yml",'r')
data = yaml.load(yamlDoc)
yamlDoc.close()
prettyData = yaml.dump(data, default_flow_style=False)
return prettyData
Run Code Online (Sandbox Code Playgroud)
那么我可以将这个displayYaml函数添加到GUI类中吗?或者我必须将其制作为单独的文件并导入它?我尝试了不带该函数的 displayYaml 代码,并尝试将其直接写入 initUI 中,但这不起作用,并且出现错误:
UnboundLocalError: local variable 'yaml' referenced before assignment
Run Code Online (Sandbox Code Playgroud)
最后我希望它 1. 显示 yaml 文档。这将是一个固定的消息行。2. 有一个单独的消息行和文本更改框,我已经这样做了 3. 使用文本更改框中的输入内容覆盖 yaml 文档。
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()
Run Code Online (Sandbox Code Playgroud)
试试这个代码