2014-09-23 98 views
1

所以我試圖創建一個簡單的GUI,它需要一個yaml文件並通過PyQT進行編輯。 假設yaml包含{example:「Helloworld」}如何使用PyQt4 GUI編輯yaml文件

即使在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文檔。這將是一條固定的消息行。 2.有一個單獨的消息行和文本更改框,我已經做了 3.使用textchange框中的任何輸入覆蓋yaml文檔。

+0

您可以將'displayYaml'到類。你可以把它作爲一個獨立的函數在一個事件上調用(單擊按鈕等),或者你可以讓initUI運行它。 – 101 2014-09-23 21:48:29

+0

這也不是很有效,所以老實說,我是一個,但沒有想法。 – KirinSoo 2014-09-23 22:09:36

回答

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() 

試試這個代碼

+0

謝謝!因此,這解決了加載數據問題...但我可以做兩個按鈕:「加載yaml」和「保存yaml」和任何在PlainTextEdit窗口中覆蓋當前的yaml? – KirinSoo 2014-09-23 22:39:25

+2

它完全取決於你:) – Achayan 2014-09-23 22:43:55