2010-03-22 9 views
20

मैं अजगर करने के लिए नया हूँ और अपने आप जीयूआई प्रोग्रामिंग (उम्मीद) को पढ़ाने के लिए शुरू कर रहा हूँ PyQT4.7 और अजगर 2.6PyQT और अजगर के साथ QTDesigner का उपयोग करते हुए 2.6

का उपयोग कर मैं तो बस (QTDesigner सहित पूरे PyQT/QT4 पैकेज डाउनलोड किया) पीईक्यूटी वेबसाइट से, हालांकि यह QTDesigner लगता है, जो प्रत्येक विजेट के रूप में उपयोग करने के लिए आश्चर्यजनक लग रहा है (क्योंकि आप प्रत्येक विजेट के सभी गुण/गुण/डिफ़ॉल्ट आदि देख सकते हैं) और गुणों को दृष्टि से संपादित करना बहुत अच्छा है, लेकिन पीईक्यूटी सेट नहीं है QTDesigner सीधे पीईक्यूटी और पीईक्यूटीएस पायथन कोड पीढ़ी स्क्रिप्ट के साथ एकीकृत करने के लिए:

यानी: "कोड देखें" मारना, डिजाइनर-> सी ++ स्क्रिप्ट को चलाने के लिए प्रयास करता है जिसे pyuic.py स्क्रिप्ट आदि के बजाय (uic) कहा जाता है।

क्या QTDesigner को फ्लाई पर कोड पीढ़ी के लिए पीईक्यूटी के साथ बारीकी से एकीकृत करने का कोई तरीका है जैसे सी ++ के साथ करता है?

यदि नहीं, तो क्या इसका मतलब है कि मुझे अपने पायथन आईडीई के भीतर पूरे क्यूटी जीयूआई को कोड करना है और प्रत्येक विजेट के लिए सभी दस्तावेज और बॉयलरप्लेट कोड देखना है? (QTDesigner + पायथन एकीकरण होने की तुलना में बहुत अक्षम और सुरुचिपूर्ण लगता है)।

पीईक्यूटी के साथ डिजाइनर का उपयोग करने के लिए पारंपरिक टूलचेन // उत्पादन प्रवाह क्या है? (यदि कोई प्रत्यक्ष एकीकरण संभव नहीं है - क्या पाइथन + पीईक्यूटी उपयोगकर्ता सिर्फ QTDesigner का उपयोग करके सभी को एक साथ छोड़कर मैन्युअल रूप से पाइथन में सभी क्यूटी जीयूआई कोड लिखते हैं?)

एक पीईक्यूटी नौसिखिया के लिए कोई अतिरिक्त सुझाव/सुझावों की सराहना की जाएगी। धन्यवाद!

ps मुझे पता है कि आप का एक समूह शायद मुझे इसे चूसने और सभी क्यूटी यूआई को हाथ से कोड करने के लिए कहने जा रहा है, लेकिन अगर मैं उपरोक्त पूछे जाने पर सीखने के दौरान डिजाइनर का उपयोग करता हूं, तो कृपया ऐसा करने का एक तरीका दें मैं इसे और अधिक आसानी से सीख सकता हूं, धन्यवाद!

उत्तर

20

मैंने अपना पहला पीईक्यूटी एप्लीकेशन लिखना शुरू किया (पीईक्यूटी केवल जीयूआई को संभालने के लिए प्रयोग किया जाता है), और ऐसा लगता है कि यह अच्छा टूलचैन है: QtDesigner .ui एस उत्पन्न करने और संसाधनों को संभालने और कुछ आईडीई, जो QtDesigner को संपादित करने के लिए सेट कर सकते हैं उन। मैं ग्रहण का उपयोग करता हूं, क्योंकि यह अत्यधिक अनुकूलन योग्य है। इस तरह से

os.system("pyrcc4.exe -o ui/images_rc.py ui/images/images.qrc") 
uic.compileUiDir(appDir + '/ui', True) 

और उसके बाद उत्पन्न वर्गों का उपयोग करना:

class MyMainWindow(QtGui.QMainWindow): 

    def __init__(self, owner): 
     QtGui.QMainWindow.__init__(self) 
     # 'Ui_MyMainWindow' is the class, that was generated by uic, 
     # naming convention is: 'Ui_' plus the name of root widget in designer 
     self.ui = Ui_MyMainWindow() 
     self.ui.setupUi(self) 
आप या आवेदन शुरू में इस तरह कुछ हद तक ऐसा करके मांग करके अपने .qrc और .ui संकलन कर सकते हैं, सेट अप के समय, या किसी अन्य समय

या आप सीधे .ui लोड कर सकते हैं, जब कंटेनर inits:

QtGui.QMainWindow.__init__(self) 
    self.ui = None 
    uic.loadUi('MyMainWindowUI.ui', self.ui) 
    #now you have the instance of Ui_MyMainWindow in self.ui too, as above 

ध्यान दें, कि मैं फ़ाइल के नाम .ui लिए यूआई प्रत्यय जोड़ लिया है, यह नाम चौराहे से बचने के लिए किया गया था, नाम कारण यूआईसी द्वारा जेनरेट की गई .py फ़ाइल का, 'Ui_' से शुरू होने वाला क्लास नाम नहीं है, बल्कि रूट विजेट का एक है।

और दूसरा एक नोट: जेनरेट की गई फाइल के अंत में 'आयात% .qrc name% _rc' (डिफ़ॉल्ट रूप से आयात छवियों_आरसी) स्ट्रिंग है, इसलिए आपको pyrcc4 का उपयोग करते समय यह अवगत होना चाहिए।

पूरे दृष्टिकोण काफी लचीला है, यह सब डमी ui आप से काम कोडिंग लेता है; लेकिन आप अभी भी MyMainWindow.ui विशेषता है, जहां Ui_MyMainWindow का उदाहरण देता है में कुछ ठीक ट्यूनिंग कर सकते हैं; और यह अनियंत्रित विरासत से बचाता है। व्यक्तिगत रूप से, मैं _connectSlots और MyMainWindow में _initIntefrace तरीकों कुछ काम डिजाइनर नहीं कर सकते करने के लिए बनाते हैं।

फिर भी मैं, कि लेखन इंटरफ़ेस कोड नोट करने के लिए कोड, यूआईसी द्वारा उत्पन्न कारण अपने आप को अच्छा तरीका है द्वारा है, बदसूरत है। मैं इस वजह से loadUi() द्वारा जगह में .ui लोड करने के लिए पसंद करते हैं :) और अगर आप कस्टम PyQT नियंत्रण का एक बहुत कुछ है, यह इसलिए उन्हें QtDesigner में लाने के लिए booooring है ..

1

आप अपने कंसोल में pyuic (या बल्कि pyuic4) चला सकते हैं। आप पाइथन के साथ डिजाइनर का उपयोग करके अपना जीयूआई बना सकते हैं, जैसे आप इसे सी ++ के साथ करेंगे।

वैसे: मैंने अपने ऐप (कोड के 10k) के लिए सभी जीयूआई सामग्री लिखी है। मुझे वास्तव में जीयूआई डिजाइनर पसंद नहीं हैं और जेनरेट कोड के साथ काम करते हैं, जब आपको कुछ ट्विक करने की आवश्यकता होती है।

0

QtDesigner uic.exe का उपयोग करता है पर उत्पन्न करने के लिए सी ++ कोड उड़ो। uic.exe एक कमांड लाइन उपकरण है, इसे फ़ाइल पैरामीटर इनपुट पैरामीटर के रूप में मिलता है। पायथन के साथ एकीकरण के लिए, आप एक पाइथन प्रोग्राम लिख सकते हैं जो pyuic.py का उपयोग करता है, uic.exe के इनपुट (ऑर्डर, स्विच इत्यादि) के साथ इनपुट से मेल खाता है, इसे निष्पादन योग्य (py2exe का उपयोग करके) में परिवर्तित करें और निष्पादन योग्य को uic.exe पर बदलें। तो क्यूटी के बिन निर्देशिका में uic.exe साथ बदलें (uic.exe PyQt में मौजूद के रूप में मैं जानता हूँ कि न)। आपको uic.exe के इनपुट तर्कों और आपके हाथ से लिखित मैक्रो (उन्हें एक साथ मिलना चाहिए) के बारे में सावधान रहना चाहिए।

मुझे लगता है कि आपके प्रोग्राम को पायथन के पथ (पायइक का उपयोग करने के लिए) जानने की आवश्यकता होगी। यदि आप विंडोज़ का उपयोग कर रहे हैं, तो आप रजिस्ट्री से पथ प्राप्त कर सकते हैं।

2

मैंने जो किया वह मैंने अपना खुद का निष्पादन योग्य बनाया जो कि pyuic.py स्क्रिप्ट के लिए एक रैपर है।

आप की आवश्यकता होगी ...

  1. हो और नीचे

  2. संपादित में qt.conf फ़ाइल uic.py कोड में py2exe

  3. बदलें PYTHON_PATH स्थापित करने के लिए साइट-पैकेज \ PyQt4 और सेट बैनरीज = यूआईसी एक्सई युक्त फ़ोल्डर में पथ एक बार बनने के बाद।

  4. रखें uic.py और setup.py एक ही फ़ोल्डर

  5. में कमांड प्रॉम्प्ट में फ़ोल्डर है जहाँ setup.py करने के लिए पर जाएँ और uic.py तो निम्न आदेश "अजगर setup.py चलाए जा रहे हैं py2exe "।

//----uic.py

#uic.py 
import subprocess 
import sys 

args = "" 

for arg in sys.argv: 
    if sys.argv[0] != arg: 
     args += arg + " " 


# Start pyuic.py script 
command = 'python %PYTHON_PATH%\\PyQt4\\uic\\pyuic.py '+ args 
out = '' 


child = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE) 
complete = False 
while True: 
    out = child.stderr.read(1) 
    if out == '' and child.poll() != None: 
     break 
    if out != '': 
     sys.stdout.write(out) 
     sys.stdout.flush() 

// ----- setup.py

#setup.py  
from distutils.core import setup 
import py2exe 

setup(windows=[{"script":"uic.py"}], options={"py2exe" : {"includes" : ["sip", "PyQt4.QtCore"]}}) 
संबंधित मुद्दे