程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python & c++ mixed call programming comprehensive practice - call Python function in the open slot function of 24qt button event

編輯:Python

author : Empty bad uncle
Blog :https://xuhss.com

The breakfast shop won't be open till night , The people who want to eat have already come !

QT Of button events Open Call in slot function python function

One 、C++ The interface of the development selection file is passed to python

Development Select File Interface to python call . Here is a global method to open the dialog box

#include <QFileDialog>
using namespace std;
static PyObject *pModule = 0;
// Returns the selected file path 
PyObject* OpenDialog(PyObject *self)
{

QString fileName = "";
fileName = QFileDialog::getOpenFileName();
if (fileName.isEmpty())
return PyUnicode_FromString("");
return PyUnicode_FromString(fileName.toStdString().c_str());
}

Two 、 Add slot function

double-click PyPlayer.ui file , open Qt The designer , Add a button :

Then add a slot function for this control

stay C++ Of PyPlayer.h Add the definition of slot function in :

#pragma once
#include <QtWidgets/QWidget>
#include "ui_PyPlayer.h"
class PyPlayer : public QWidget
{

Q_OBJECT
public:
PyPlayer(QWidget *parent = Q_NULLPTR);
public slots:
void Open();
private:
Ui::PyPlayerClass ui;
};

Its implementation is to call python Medium opoen function

void PyPlayer::Open() {

cout << "PyPlayer::Open()" << endl;
// call Python Of open function
}

Run it :

You can see that the control binding is successful :

3、 ... and 、 call python Medium open function

stay pyqt.py Add open Definition of function :

def open():
print("Python open")
filename = OpenDialog()
print(filename)

C++ End pass PyPlayer::Open() Call the above python Of open function :

void PyPlayer::Open() {

cout << "PyPlayer::Open()" << endl;
// call Python Of open function 
if (!pModule) return;
PyObject *open = PyObject_GetAttrString(pModule, "open");
if (!open || !PyCallable_Check(open))
{

PyErr_Print();
return;
}
PyObject_CallObject(open, 0);
}

Four 、 Pass on C++ Write global functions opendialog to python

So how to be in python How to call C++ Write global functions opendialog Well ?

Can be opened in a constructor :

PyPlayer::PyPlayer(QWidget *parent)
: QWidget(parent)
{

ui.setupUi(this);
Py_SetPythonHome(L"./");
Py_Initialize();
// Loading module 
pModule = PyImport_ImportModule("pyqt");
if (!pModule)
{

printf("PyImport import error");
PyErr_Print();
return;
}
// obtain python Configuration item Change the size and title of the window 
PyObject *conf = PyObject_GetAttrString(pModule, "conf");
if (!conf)
{

cout << "Please set the conf" << endl;
PyErr_Print();
return;
}
PyObject *key = PyUnicode_FromString("width");
int width = PyLong_AsLong(PyDict_GetItem(conf, key));
Py_XDECREF(key);
key = PyUnicode_FromString("height");
int height = PyLong_AsLong(PyDict_GetItem(conf, key));
Py_XDECREF(key);
// Change window title 
key = PyUnicode_FromString("title");
wchar_t title[1024] = {
 0 };
PyUnicode_AsWideChar(PyDict_GetItem(conf, key), title, 1023);
this->setWindowTitle(QString::fromUtf16((char16_t*)title));
Py_XDECREF(key);
if (width > 0 && height > 0)
{

resize(width, height);
}
Py_XDECREF(conf);
// Open the interface for selecting files to python
static PyMethodDef meths[] = {

{
"OpenDialog", (PyCFunction)OpenDialog, METH_NOARGS, 0}
,{
NULL}
};
int re = PyModule_AddFunctions(pModule, meths);
if (!re)
{

PyErr_Print();
}
// Open thread call python Of main function 
}

In this case , Run to find , We can print the path of the selected file by clicking the open button

5、 ... and 、 summary

  • This article demonstrates QT Of button events Open Call in slot function python function .
  • If you think the article is useful to you , Remember give the thumbs-up Collection forward A wave , Bloggers also support making exclusive dynamic wallpapers for iron fans ~

Share high-quality articles in previous periods

  • C++ QT combination FFmpeg Actual development of video player -01 Environment installation and project deployment
  • solve QT problem : function qmake:Project ERROR: Cannot run compiler ‘cl‘. Output:
  • Resolve installation QT after MSVC2015 64bit No compiler and debugger issues with configuration
  • Qt Kit tips in no complier set in kit and no debugger, The yellow exclamation mark appears and the problem is solved (MSVC2017)
  • Python+selenium automation - Realize automatic import 、 Upload external files ( Don't pop up windows window )

High quality tutorial sharing

  • If you don't enjoy reading the article , You can come to my other special column Take a look ~
  • For example, the following columns :Python Actual wechat ordering applet 、Python Quantitative trading practice 、C++ QT Practical projects and Algorithm learning column
  • You can learn more about C++/Python Relevant contents of ! Directly click on the color font below to jump !
Learning route guidance ( Click unlock ) Knowledge orientation Crowd positioning 🧡 Python Actual wechat ordering applet 🧡 Progressive class This course is python flask+ Perfect combination of wechat applet , From the deployment of Tencent to the launch of the project , Create a full stack ordering system .Python Quantitative trading practice beginner Take you hand in hand to create an easy to expand 、 More secure 、 More efficient Quantitative trading System ️ C++ QT combination FFmpeg Actual development of video player ️ The difficulty is high Sharing learning QT Finished video player source code , We need to have a solid C++ knowledge ! A community of 90000 game lovers Help each other / Blow water 90000 game lovers community , Chat and help each other , White whoring prize Python Zero basis to introduction Python beginner For small partners who have not been systematically studied , The core purpose is to enable us to learn quickly Python Knowledge to get started

Data white whoring , reminder

Follow the card below to get more programming knowledge immediately , Including various language learning materials , Thousands of sets PPT Templates and various game source materials and so on . More information can be viewed by yourself !


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved