2012-09-23 4 views
5

का उपयोग कर विंडो ले जाएं विंडो विंडो प्रबंधक का उपयोग करके पाइसाइड के साथ बनाई गई विंडो को स्थानांतरित करने के बारे में मुझे कैसे जाना चाहिए?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 फ़ंक्शन का उपयोग करने का प्रयास किया है, लेकिन यह विंडो को आंशिक रूप से स्क्रीन से खींचने से रोकता है, और कॉम्पिज या केविन जैसे विंडो प्रबंधक द्वारा प्रदान की गई चाल प्रतिक्रिया (उदा। पारदर्शिता प्रभाव) नहीं देता है।

मेरा प्रश्न है:

  1. मैं PySide के QX11Info.display() कैसे कन्वर्ट करने के लिए एक "प्रदर्शन" kdeui.NETRootInfo, या
  2. मैं कैसे उपयोग करते हैं अजगर और Xlib (या तो python-xlib साथ या करने के लिए पारित किया जा सकता है कि में libX11.so के माध्यम से) विंडो को स्थानांतरित करने के लिए _NET_WM_MOVERESIZE जैसे संदेश का उपयोग करने के लिए?
+0

निश्चित रूप से PyKDE4 को पहले से ही PyQt4 की आवश्यकता है - इसलिए विकल्प (1) के लिए कोई * अतिरिक्त * निर्भरता नहीं है। – ekhumoro

+0

काफी नहीं। पीईकेडीई 4 केडीई 4 के लिए एक रैपर है। केडी 4 को संचालित करने के लिए क्यूटी 4 की आवश्यकता है, लेकिन ** पी ** क्यूटी 4 नहीं। पायथन रैपर पूरी तरह से एक सी ++ रैपर है, और इसलिए PyQt4 पर कोई निर्भरता नहीं है। –

+0

नहीं। पीईकेडीई अब केडीई के हिस्से के रूप में बनाए रखा गया है, लेकिन इसे हमेशा पीईक्यूटी और एसआईपी दोनों की आवश्यकता होती है और यह नहीं बदला है: [यहां] देखें (http://www.riverbankcomputing.com/software/pykde/intro) और [यहां] (विवरण के लिए http://techbase.kde.org/Development/Languages/Python)। – ekhumoro

उत्तर

0

मुझे लगता है अपने आखिरी कॉल वास्तव में अलग हस्ताक्षर है, शायद इस तरह:

moveResizeRequest(<window object>, <int>, <int>, <const>)

आप विंडो आईडी (पूर्णांक) के बजाय निचोड़ करने की कोशिश कर रहे हैं।

को pygtk (और pykde) के साथ थोड़ा सा अनुभव नहीं था, तो आपको शायद विंडो स्क्रीन हैंडल ऑब्जेक्ट प्राप्त करने के लिए दिए गए स्क्रीन में सभी उच्च स्तरीय विंडो को गिनना होगा।

इसी तरह, C++ केडीई डॉक्स से:

display  An X11 Display struct. 
supportWindow The Window id of the supportWindow. The supportWindow must be created by the window manager as a child of the rootWindow. The supportWindow must not be destroyed until the Window Manager exits. 

जब तुम supportWindow में कुछ निरंतर निचोड़ करने की कोशिश कर रहे हैं।

संबंधित मुद्दे