سؤال

أنا جديد على Python وبدأت في تعليم نفسي برمجة واجهة المستخدم الرسومية (على أمل) باستخدام PYQT4.7 و Python 2.6

لقد قمت للتو بتنزيل حزمة PYQT/QT4 بأكملها (بما في ذلك QTDesigner) من موقع PYQT ، ومع ذلك يبدو QTDesigner ، الذي يبدو مدهشًا لاستخدامه كمبتدئ (حيث يمكنك رؤية جميع السمات/الخصائص/الافتراضيات وما إلى ذلك) من كل عنصر واجهة مستخدم ومرئي تحرير الخصائص رائعة ، ولكن يبدو أن Pyqt لا يعين QTDesigner للتكامل مباشرة مع برامج النص البرمجيات لتوليد رمز Pyqt و Pyqts:

IE: ضرب "Code Code" ، يحاول تشغيل البرنامج النصي المصمم-> C ++ يسمى (UIC) بدلاً من البرنامج النصي pyuic.py ، إلخ.

هل هناك طريقة للحصول على QTDesigner للتكامل عن كثب مع PYQT لتوليد الكود أثناء الطيران كما يفعل مع C ++؟

إذا لم يكن الأمر كذلك ، فهل هذا يعني أنه يجب عليّ ترميز واجهة المستخدم الرسومية الكاملة لـ QT داخل بيثون IDE والبحث عن جميع الوثائق والرمز البخاري لكل عنصر واجهة مستخدم؟ (يبدو غير فعال للغاية وغير متكافئ مقارنةً فقط بتكامل QTDesigner+Python).

ما هو تدفق الأدوات المعتاد // إنتاج الإنتاج لاستخدام المصمم مع PYQT؟ (إذا لم يكن التكامل المباشر ممكنًا - هل يتخطى مستخدمو Python+Pyqt فقط استخدام QTDesigner جميعًا معًا واكتب جميع رمز واجهة المستخدم الرسومية QT في Python؟)

سيتم تقدير أي نصائح/اقتراحات إضافية لمبتدئ PYQT. شكرًا!

ملاحظة: أعرف أن مجموعة منكم ربما ستخبرني أن تمتصها فقط وترميز جميع QT UI باليد ، ولكن إذا استخدمت المصمم أثناء التعلم كما هو موضح أعلاه ، فيرجى تقديم طريقة للقيام بذلك حتى أتمكن من تعلم ذلك بسهولة أكبر ، شكرا!

هل كانت مفيدة؟

المحلول

بدأت في كتابة أول تطبيق PYQT الخاص بي (يتم استخدام PYQT فقط للتعامل مع واجهة المستخدم الرسومية) ، ويبدو أن أدوات جيدة هي: QTDesigner لإنشاء .ui s والموارد وبعض IDE ، والتي يمكن أن تعدل QTDesigner لتحريرها. أستخدم Eclipse ، لأنها قابلة للتخصيص للغاية. يمكنك جمع.

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)

أو يمكنك تحميل .ui مباشرة عند الحاوية:

    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 ، الذي تم إنشاؤه بواسطة UIC ، ليس اسم الفئة بدءًا من "ui_" ، ولكن فقط واحد من عنصر واجهة العناصر الجذرية.

وملاحظة أخرى واحدة: في نهاية الملفات التي تم إنشاؤها UIC "استيراد ٪. QRC name ٪ _rc '(افتراضيًا هي سلسلة import_rc) ، لذلك يجب أن تدرك ذلك عند استخدام pyrcc4.

النهج كله مرن بما فيه الكفاية ، يتطلب كل أعمال ترميز واجهة المستخدم الوهمية منك ؛ ولكن لا يزال بإمكانك القيام ببعض الضبط الدقيق في سمة mymainwindow.ui ، حيث يضع مثيل ui_mymainwindow ؛ وتجنب الميراث غير الضروري. أنا شخصياً أقوم بعمل _connectslots وأساليب _initintefrace في mymainwindow للقيام ببعض مصمم العمل الذي لا يمكن.

لا يزال يتعين عليّ أن ألاحظ أن رمز الواجهة في الكتابة بنفسك هو نهج جيد ، ويسبب الكود ، الذي تم إنشاؤه بواسطة UIC ، قبيح. أفضل التحميل .ui في مكانه بواسطة loadui () بسبب هذا :) وإذا كان لديك الكثير من عناصر تحكم Pyqt المخصصة ، فمن المهم للغاية إحضارهم إلى QTDesigner ..

نصائح أخرى

ما فعلته هو أنني صنعت UIC قابلة للتنفيذ ، وهذا عبارة عن غلاف للنص pyuic.py.

انك سوف تحتاج...

  1. للحصول على وتثبيت Py2exe

  2. استبدل python_path في رمز uic.py أدناه

  3. قم بتحرير ملف qt.conf في حزم الموقع pyqt4 وقم بتعيين الثنائيات = المسار إلى مجلد يحتوي على UIC exe بمجرد صنعه.

  4. ضع uic.py و setup.py في نفس المجلد

  5. في موجه الأوامر ، انتقل إلى المجلد حيث يتم تشغيل SETUP.py و uic.py في الأمر التالي "python setup.py py2exe".

//----iic.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"]}})

يمكنك الجري pyuic (أو بالأحرى pyuic4) من اليد ، في وحدة التحكم الخاصة بك. يمكنك جعل واجهة المستخدم الرسومية الخاصة بك باستخدام مصمم مع Python ، تمامًا كما ستفعل ذلك مع C ++.

بالمناسبة: لقد كتبت جميع مواد واجهة المستخدم الرسومية لتطبيقي (10K من التعليمات البرمجية) باليد. لا أحب مصممي واجهة المستخدم الرسومية حقًا وأعمل مع رمز تم إنشاؤه ، عندما تحتاج إلى تعديل شيء ما.

يستخدم QTDesigner uic.exe لإنشاء رمز الذبابة C ++. uic.exe هي أداة سطر الأوامر ، تحصل على أسماء الملفات كمعلمات إدخال. للتكامل مع Python ، يمكنك كتابة برنامج Python الذي يستخدم pyuic.py, ، تطابق المدخلات مع uic.exeمدخلات (الطلب ، التبديل وما إلى ذلك) ، قم بتحويلها إلى قابلة للتنفيذ (باستخدام PY2EXE) وإعادة تسمية القابل للتنفيذ إلى uic.exe. ثم استبدله بـ uic.exe في دليل بن QT (uic.exe لا توجد في pyqt كما أعرف). يجب أن تكون حذرا فقط بشأن حجج الإدخال من uic.exe والماكرو المكتوب يدويًا (يجب أن يتطابق معًا).

أعتقد أن برنامجك سيحتاج إلى معرفة مسار Python (من أجل استخدام Pyuic). إذا كنت تستخدم Windows ، فيمكنك الحصول على المسار من السجل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top