рд╢рд╛рдпрдж рдЖрдк PySide, Qt рдХреЗ рд▓рд┐рдП рдЕрдЬрдЧрд░ рдмрд╛рдВрдзрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред рдПрдХ PyQt рдкреБрд╕реНрддрдХрд╛рд▓рдп рднреА рд╣реИ рдЬреЛ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ GPL рдпрд╛ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рддрдХ рд╕реАрдорд┐рдд рд╣реИред PySide рдХреЛ LGPL рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддрд╛ рд╣реИред
рдкрд╛рдпрдерди рдмрд╣реБрдд рдЬрд▓реНрджреА рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ PySide Qt рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ, C ++ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 1.5-2 рдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рдЕрдХреНрд╕рд░ PySide рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ C ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (Qt-like рдЗрдВрдЯрд░рдлрд╝реЗрд╕) рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХрд╛рд░реНрдп Qt (C ++) рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рдХреНрдпреВрдЯреА рд╕реЗ рдПрдкреАрдЖрдИ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдорд░реНрдерди рдФрд░ рдЖрд╡реЗрджрди рдХреЗ рдХреНрдпреВрдЯреА (рд╕реА ++) рдФрд░ рдкрд╛рдпрдерди (рдкрд╛рдпрд╕рд╛рдЗрдб) рднрд╛рдЧреЛрдВ рдХреЗ рдмреАрдЪ рд╕рд┐рдЧреНрдирд▓-рд╕реНрд▓реЙрдЯ рдХрдиреЗрдХреНрд╢рди рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЕрднреА рд╕рдм рдХреБрдЫ рдХрд░рдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд╣реИред
рдЗрд╕рд▓рд┐рдП, рд╣рдо C ++ рдФрд░ рдкрд╛рдпрдерди рджреЛрдиреЛрдВ рднрд╛рдЧреЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдПрдХ рд╣рд╛рдЗрдмреНрд░рд┐рдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ Qt рдХреЛ рдореБрдЦреНрдп GUI рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рд╣рдореЗрдВ Qt, Python рдФрд░ PySide рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдПрдБ:
рд╣рд╛рдЗрдмреНрд░рд┐рдбрдРрдк /
| -рдбреЗрдЯрд╛ /
| | -рдЧреНрд▓реЛрдмрд▓.рд╣
| | -рд╕реНрдЯреАрдкреЗрд╕рд┐рд╕реНрдЯрдоред xml
| -рд╣рд┐рдВрджреА /
| | -рдорд╛рдЗрдирд╡рд┐рдВрдбреЛ.рдПрдЪ
| | -рдорд╛рдЗрдирд╡рд┐рдВрдбреЛред рд╕реАрдкреА
| | -рд╣рд┐рдВрджреА.рдкреНрд░реЛ
| -рд╣рд┐рдВрджреА /
| | -рд╣рд┐рдВрджреАрдкреНрд░рд╛ .рдкреНрд░реЛ
| -рдмрд┐рд▓реНрдЯ .sh
-Main.py
рд╣рд╛рдЗрдмреНрд░рд┐рдб рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ C ++ рднрд╛рдЧ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рд╕реЗ dll / dylib / so рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
Katalog
рд╣рд╛рдЗрдмреНрд░рд┐рдб рдореЗрдВ C ++ рднрд╛рдЧ рдХрд╛ рдЖрд╡рд░рдг (рд░реИрдкрд┐рдВрдЧ) рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрд╡реЗрджрди рдХреЗ рдкрд╛рдпрдерди рднрд╛рдЧ рдореЗрдВ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдбреЗрдЯрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ C ++ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░ (рдкреНрд░рдХрд╛рд░) рдХрд╛ рд╡рд░реНрдгрди рд╣реИред рдпрд╣ рдПрдХ рдПрдХреНрд╕рдПрдордПрд▓ рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬреЛ рдкрд╛рдпрдерди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╕рдордп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИред рдЖрдк PySide рд╡реЗрдмрд╕рд╛рдЗрдЯ (
http://www.pyside.org/docs/shiboken/contents.html ) рдкрд░ рдЯрд╛рдЗрдкрд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рд╛рдЗрдмреНрд░рд┐рдб рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ C ++ (Qt) рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛рдПрдВред рдЖрдЗрдП рд╕рд░рд▓рддрдо
QMainWindow рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ:
рд╣рд╛рдЗрдмреНрд░рд┐рдб / рд╕рдВрдХрд░.рдкреНрд░реЛ :
TEMPLATE = app CONFIG += qt QT += core gui UI_DIR = build RCC_DIR = build MOC_DIR = build OBJECTS_DIR = build HEADERS += MainWindow.h SOURCES += MainWindow.cpp Main.cpp
рд╣рд╛рдЗрдмреНрд░рд┐рдб / Main.cpp :
#include <QtGui> #include "MainWindow.h" int main(int argc, char ** argv) { QApplication app(argc, argv); MainWindow window; window.resize(1000,700); window.show(); return app.exec(); }
рд╣рд╛рдЗрдмреНрд░рд┐рдб / рдореЗрдирд╡рд┐рдВрдбреЛ .h :
#ifndef MainWindow_H #define MainWindow_H #include <QMainWindow> class QPushButton; class QGraphicsView; class QGraphicsScene; class QPlainTextEdit; class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget * parent = 0L); virtual ~MainWindow(); signals: void runPythonCode(QString); private slots: void runPythonCode(); public: QGraphicsView * viewer; QGraphicsScene * scene; QPlainTextEdit * editor; QPushButton * pb_commit; }; #endif // MainWindow_H
рд╣рд╛рдЗрдмреНрд░рд┐рдб / MainWindow.cpp :
#include <QtGui> #include "MainWindow.h" MainWindow::MainWindow(QWidget * parent):QMainWindow(parent) { QSplitter * splitter = new QSplitter; setCentralWidget(splitter); QWidget * editorContent = new QWidget; splitter->addWidget(editorContent); QVBoxLayout * layout = new QVBoxLayout; editorContent->setLayout(layout); editor = new QPlainTextEdit; layout->addWidget(editor); pb_commit = new QPushButton(tr("Commit")); connect(pb_commit, SIGNAL(clicked()), this, SLOT(runPythonCode())); layout->addWidget(pb_commit); scene = new QGraphicsScene(this); viewer = new QGraphicsView; viewer->setScene(scene); splitter->addWidget(viewer); splitter->setSizes(QList<int>() << 400 << 600); } MainWindow::~MainWindow() {;} void MainWindow::runPythonCode() { emit runPythonCode(editor->toPlainText()); }
рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╛рдПрдВ рдкреИрдирд▓ рдореЗрдВ рдПрдХ рд╕рдВрдкрд╛рджрдХ рдФрд░ рджрд╛рдИрдВ рдУрд░ рдХреИрдирд╡рд╛рд╕ рд╣реИ:
рд╣рдо рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ PySide рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
1. dll / dylib / so рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛ рдлрд╛рдЗрд▓ рдХреЛ рдмрджрд▓реЗрдВ
2. MainWindow рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рдмрдирд╛рдПрдБ
3. рд╣рдо рдЗрдирдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ C рдореБрдЦреНрдп () рдХреЗ рдмрдЬрд╛рдп Main.py рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
рдкреНрд░реЛ рдлрд╛рдЗрд▓ рдХреЛ рдмрджрд▓рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: TEMPLATE рдХреЛ рд▓рд┐рдмрд╛рд╕ рдореЗрдВ рдмрджрд▓реЗрдВ рдФрд░ main.cpp рдХреЛ рд▓рд┐рд╕реНрдЯ рд╕реЗ рд╣рдЯрд╛ рджреЗрдВ, TARGET рдХреЛ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (HybridApp, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ) рдХреЗ рд░реВрдЯ рдкрд░ рднреА рд░рдЦреЗрдВред
рд╣рд╛рдЗрдмреНрд░рд┐рдб / рд╕рдВрдХрд░.рдкреНрд░реЛ :
TEMPLATE = lib TARGET = ../Hybrid CONFIG += qt QT += core gui UI_DIR = build RCC_DIR = build MOC_DIR = build OBJECTS_DIR = build HEADERS += MainWindow.h SOURCES += MainWindow.cpp
рдкрд░рд┐рдгрд╛рдо
HybridApp рдлрд╝реЛрд▓реНрдбрд░ (рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ) рдореЗрдВ
libHybrid.dylib рд╣реИрдЕрдм рдЖрд╡реЗрджрди рдХреЗ C ++ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рдмрдирд╛рдПрдВред рдЕрд╕реЗрдВрдмрд▓реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЬрдбрд╝ рдореЗрдВ
build.sh рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реА рд╣реЛрдЧреАред (рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдм рдХреБрдЫ рдПрдХрддреНрд░ рдХрд░реЗрдЧреА: C ++ рднрд╛рдЧ рдФрд░ рдЖрд╡рд░рдг)
build.sh :
рд╕рднреА рд░реИрдкрд░ рдирд┐рд░реНрдорд╛рдг рдХреНрдпреВрдЯреНрд░ рд╣реЗрдбрд░, рдХреНрдпреВрдЯреА рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдФрд░ рд╣рдорд╛рд░реЗ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо (рдЯрд╛рдЗрдк рд╡рд┐рд╡рд░рдг) рдХреЗ рд▓рд┐рдП рдПрдХ рдкрде рдХреЗ рд╕рд╛рде рдЬрдирд░реЗрдЯрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рд╣реИред рдлрд┐рд░ рд╣рд╛рдЗрдмреНрд░рд┐рдб рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рдХреНрдпреВрдореЗрдХ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдЕрдЬрдЧрд░ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВред
рдбреЗрдЯрд╛ / typeystem.xml :
<?xml version="1.0"?> <typesystem package="PyHybrid"> <load-typesystem name="typesystem_core.xml" generate="no"/> <load-typesystem name="typesystem_gui.xml" generate="no"/> <object-type name="MainWindow"/> </typesystem>
рдбреЗрдЯрд╛ / рд╡реИрд╢реНрд╡рд┐рдХ ред
#undef QT_NO_STL #undef QT_NO_STL_WCHAR #ifndef NULL #define NULL 0 #endif #include <MainWindow.h>
рдФрд░ рдЕрдЬрдЧрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдкреНрд░реЛ рдлрд╛рдЗрд▓:
рд╕рдВрдХрд░ / рд╕рдВрдХрд░ TEMPLATE = lib QT += core gui INCLUDEPATH += hybrid INCLUDEPATH += ../hybrid INCLUDEPATH += /usr/include/python2.6 INCLUDEPATH += /usr/local/include/shiboken INCLUDEPATH += /usr/local/include/PySide INCLUDEPATH += /usr/local/include/PySide/QtCore INCLUDEPATH += /usr/local/include/PySide/QtGui LIBS += -ldl -lpython2.6 LIBS += -lpyside LIBS += -lshiboken LIBS += -L.. -lHybrid TARGET = ../PyHybrid SOURCES += \ pyhybrid/pyhybrid_module_wrapper.cpp \ pyhybrid/mainwindow_wrapper.cpp \
рд╢рд╛рдпрдж рдЗрд╕ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП
рд╕реАрдореЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рд╢рд┐рдмреЛрдХреЗрди, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрде рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди рд╕реА рдлрд╛рдЗрд▓
рдХреНрдпреВрдореЗрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЪреБрдиреА рдЧрдИ рдереАред
рдпрд╣ рд▓рдЧрднрдЧ рддреИрдпрд╛рд░ рджрд┐рдЦрддрд╛ рд╣реИ - build.sh рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ C ++ рднрд╛рдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЬрдЧрд░ рдореЙрдбреНрдпреВрд▓ рд╣реИред
рдореЗрдирдлреНрд░реЗрдо рдореЗрдВ рджреЛрдиреЛрдВ рднрд╛рдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдХреНрд╖рдг:
рдореЗрдирд╣реЛрдо import sys from PySide.QtCore import * from PySide.QtGui import * from PyHybrid import * class RunScript(QObject): def __init__(self, mainWindow): QObject.__init__(self) self.mainWindow = mainWindow def runScript(self, script): mainWindow = self.mainWindow exec(str(script)) a = QApplication(sys.argv) w = MainWindow() r = RunScript(w) w.setWindowTitle('PyHybrid') w.resize(1000,800) w.show() a.connect(w, SIGNAL('runPythonCode(QString)'), r.runScript) a.connect(a, SIGNAL('lastWindowClosed()'), a, SLOT('quit()') ) a.exec_()
рдЗрд╕ рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЕрдкрдиреЗ C ++ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдПрдХ рд╣реА рд╡рд┐рдВрдбреЛ рдорд┐рд▓рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде - рдЕрдм рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рджрд░реНрдЬ рдЕрдЬрдЧрд░ рдХреЛрдб рдХреЛ рд╕реАрдзреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ C ++ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЪрд▓реЛ рдереЛрдбрд╝рд╛ рдХреЛрдб рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЛ:
mainWindow.statusBar().show()
рдФрд░ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХ рд╕реНрдерд┐рддрд┐ рдкрдЯреНрдЯреА рд╣реИред
рдХреИрдирд╡рд╛рд╕ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдмрджрд▓реЗрдВ?
mainWindow.scene.setBackgroundBrush(QColor('#e0e0ff'))
рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
li1 = QGraphicsLineItem(10,10, 500,500) li1.setPen(QPen(QBrush(QColor("#ff0000")), 3.0, Qt.DashLine)) mainWindow.scene.addItem(li1)
рдЕрдЧрд▓рд╛, рд╣рдо рд░рдирдЯрд╛рдЗрдо рдкрд░ рдирдИ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ?
mainWindow.viewer.setRenderHint(QPainter.Antialiasing) class MyItem(QGraphicsItem): def boundingRect(self): return QRectF(-100,-100,200,200) def paint(self, painter, option, widget): g = QLinearGradient(-100,-100, 100,100) g.setColorAt(0, QColor('#00ff00')) g.setColorAt(1, QColor('#ffffff')) painter.setBrush(g) p = QPen(QBrush(QColor("#ff0000")), 4, Qt.DashLine) painter.setPen(p) painter.drawRoundedRect(-100,-100,200,200, 30,30) my1 = MyItem() mainWindow.scene.addItem(my1) my1.setPos(200,200)
рд╣рдорд╛рд░реЗ рдЫреЛрдЯреЗ рд╕реЗ рдЖрд╡реЗрджрди рдХреЛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЕрдиреВрдард╛ рдЕрд╡рд╕рд░ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ: рд╣рдо рдЗрд╕реЗ рд╕реАрдзреЗ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореМрдЬреВрджрд╛ рдПрдкреАрдЖрдИ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ C ++ рднрд╛рдЧ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЙрдирдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
QOBject / QWidget , рд╕рдВрд╕рд╛рдзрд┐рдд рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
Qt + PySide рд╕рдВрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╛рдлреА рд╡реНрдпрд╛рдкрдХ рд╣реИ - рдЦреЗрд▓ рд╡рд┐рдХрд╛рд╕, рдЬрд╣рд╛рдБ рдЖрдкрдХреЛ рдЕрдХреНрд╕рд░ рд░рдирдЯрд╛рдЗрдо рдХреЗ рджреМрд░рд╛рди рдХреБрдЫ рдХреЛ рд╕рд╣реА рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЦреЗрд▓ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, PySide рдХреА рдорджрдж рд╕реЗ рд╣рдо рдирдИ рдХрдХреНрд╖рд╛рдПрдВ, рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ C ++ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╛ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рдХреЗрд╡рд▓ C ++ рдХреА рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЯреБрдХрдбрд╝реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
рдЙрдкрд░реЛрдХреНрдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдиреНрдХреЛрдб рдХрд┐рдП рдЬрд╛рдиреЗ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╕реАрдзреЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдЖрдкрдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдЖрд╡реЗрджрди рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕рднреА рдХреЛрдб рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред