का उपयोग कर विंडो ले जाएं विंडो विंडो प्रबंधक का उपयोग करके पाइसाइड के साथ बनाई गई विंडो को स्थानांतरित करने के बारे में मुझे कैसे जाना चाहिए?PySide और PyKDE4
मुझे लगता है कि kdeui NETRootInfo
कक्षा moveResizeRequest
विधि के साथ है, जो वास्तव में मैं चाहता हूं। निम्नलिखित:
from PySide.QtCore import Qt
from PyKDE4 import kdeui
from PySide.QtGui import QX11Info
import sys
from ctypes import CDLL
Xlib = CDLL('libX11.so.6')
def move_window(window, event):
if event.buttons() & Qt.LeftButton:
pos = event.buttonDownScreenPos(Qt.LeftButton)
Xlib.XUngrabPointer(QX11Info.display(), QX11Info.appTime())
rootinfo = kdeui.NETRootInfo(QX11Info.display(), kdeui.NET.WMMoveResize)
rootinfo.moveResizeRequest(window.winId(), pos.x(), pos.y(), kdeui.NET.Move)
मुझे देता है:
TypeError: NETRootInfo(): arguments did not match any overloaded call:
overload 1: argument 1 has unexpected type 'int'
overload 2: argument 1 has unexpected type 'int'
overload 3: argument 1 has unexpected type 'int'
overload 4: argument 1 has unexpected type 'int'
यह त्रुटि के कारण होता है क्योंकि QX11Info.display()
रिटर्न एक लंबे (सूचक), और नहीं किसी प्रदर्शन संरचना।
मैं उपयोग कर सकते हैं PyQt4 के QX11Info.display()
NETRootInfo
के PySide एक के बजाय निर्माता के लिए पहले पैरामीटर, जैसे के रूप में:
...
from PySide.QtGui import QX11Info
from PyQt4.QtGui import QX11Info as QX11InfoQt
...
def move_window(window, event):
if event.buttons() & Qt.LeftButton:
pos = event.buttonDownScreenPos(Qt.LeftButton)
Xlib.XUngrabPointer(QX11Info.display(), QX11Info.appTime())
rootinfo = kdeui.NETRootInfo(QX11InfoQt.display(), kdeui.NET.WMMoveResize)
rootinfo.moveResizeRequest(window.winId(), pos.x(), pos.y(), kdeui.NET.Move)
लेकिन इस PySide के अलावा PyQt4 पर निर्भरता कहते हैं।
इसके अतिरिक्त, मैंने एक्सलिब के XMoveWindow
फ़ंक्शन का उपयोग करने का प्रयास किया है, लेकिन यह विंडो को आंशिक रूप से स्क्रीन से खींचने से रोकता है, और कॉम्पिज या केविन जैसे विंडो प्रबंधक द्वारा प्रदान की गई चाल प्रतिक्रिया (उदा। पारदर्शिता प्रभाव) नहीं देता है।
मेरा प्रश्न है:
- मैं PySide के
QX11Info.display()
कैसे कन्वर्ट करने के लिए एक "प्रदर्शन"kdeui.NETRootInfo
, या - मैं कैसे उपयोग करते हैं अजगर और Xlib (या तो
python-xlib
साथ या करने के लिए पारित किया जा सकता है कि में libX11.so के माध्यम से) विंडो को स्थानांतरित करने के लिए_NET_WM_MOVERESIZE
जैसे संदेश का उपयोग करने के लिए?
निश्चित रूप से PyKDE4 को पहले से ही PyQt4 की आवश्यकता है - इसलिए विकल्प (1) के लिए कोई * अतिरिक्त * निर्भरता नहीं है। – ekhumoro
काफी नहीं। पीईकेडीई 4 केडीई 4 के लिए एक रैपर है। केडी 4 को संचालित करने के लिए क्यूटी 4 की आवश्यकता है, लेकिन ** पी ** क्यूटी 4 नहीं। पायथन रैपर पूरी तरह से एक सी ++ रैपर है, और इसलिए PyQt4 पर कोई निर्भरता नहीं है। –
नहीं। पीईकेडीई अब केडीई के हिस्से के रूप में बनाए रखा गया है, लेकिन इसे हमेशा पीईक्यूटी और एसआईपी दोनों की आवश्यकता होती है और यह नहीं बदला है: [यहां] देखें (http://www.riverbankcomputing.com/software/pykde/intro) और [यहां] (विवरण के लिए http://techbase.kde.org/Development/Languages/Python)। – ekhumoro