كيف يمكنني تعطيل واضح من الحافظة عند الخروج من تطبيق PYQT؟

StackOverflow https://stackoverflow.com/questions/2007103

  •  18-09-2019
  •  | 
  •  

سؤال

لدي تطبيق PYQT4 بسيط (انظر الرمز أدناه) يكشف عن مشكلة: إذا قمت بتحديد النص من QLineEdit وقم بنسخه إلى الحافظة، ثم يمكنني لصقه إلى تطبيق آخر فقط أثناء تشغيل طلبي. يبدو أنه عند الخروج، يقوم تطبيق PYQT بمسح الحافظة حتى لا أستطيع لصق النص بعد إغلاق التطبيق.

ماذا يمكنني أن أفعل لتجنب هذه المشكلة؟

Pyqt 4.4.3 @ Python 2.5 @ Windows XP. أيضا تأكيد هذا التأثير على Pyqt 4.5+، وعلى Linux أيضا.

import sys
from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
edit = QtGui.QLineEdit()
edit.setText('foo bar')
edit.show()
app.exec_()
هل كانت مفيدة؟

المحلول

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

قم بتشغيل هذا الرمز عند الخروج من التطبيق (على سبيل المثال في معالج الخطوف):

   from PyQt4 import QtGui, QtCore
   clipboard = QtGui.QApplication.clipboard()
   event = QtCore.QEvent(QtCore.QEvent.Clipboard)
   QtGui.QApplication.sendEvent(clipboard, event)

المفهوم الأساسي وراء هذا هو أنه بسبب نسخ شيء افتراضي في الحافظة نسخ فقط مرجع / مؤشر إلى التطبيق المصدر. ثم عندما يريد تطبيق آخر لصق البيانات من الحافظة، يطلب البيانات من التطبيق المصدر. دعا olefluscclipboard. يؤدي Windows إلى نسخ البيانات الحقيقية في الحافظة بدلا من المرجع. على الرغم من أن هذا يتسبب في تأخير عند نسخ الصور، إلا أنه لا ينبغي أن يكون له أي تأثير ملحوظ مع سلاسل.

الرمز أعلاه هو عبارة عن منصة رائعة ولا تجعل أي تأثير سيء على منصة Linux.

نصائح أخرى

تعثرت على هذا السؤال عندما صادفت إلى مشكلة مماثلة تحت GNU / Linux ووجدت الإجابة على الموقع المشار إليها بواسطة Bialix (الذي تم تغيير عنوانه، ولكن لا يزال بإمكان الوصول إليه عبر بحث الويب). لاستشهاد الجزء الأكثر أهمية:

تذكر أنه في Linux، ما لم يكن لديك شيء مثل Klipper، عندما يقوم التطبيق بإخراج الحافظة، تفرغ الحافظة.

لذلك هناك ذلك. إنه شيء نظام لغنو / لينكس. إليك شرح أكثر شمولا من أوبونتو ويكي:

لماذا يحدث هذا؟

تحدث المشكلة لأن XORG يأخذ نهج محافظ للنسخ. إنها نسخ فقط إشارة إلى البيانات الأصلية عندما يقوم المستخدم بتحديد أو نسخ. لا يذهب واسترداد البيانات الفعلية من البرنامج المصدر حتى يطلب المستخدم عن عجينة. إنه يوفر الكثير من النقل غير الضروري للبيانات بهذه الطريقة، على حساب عدم وجود أي طريقة لاسترداد البيانات من برنامج مغلق لم ينقذ الحافظة في مكان آخر.

يمكنك الحصول علىها عن طريق تثبيت مدير الحافظة مثل parcellite، klipper، glipper أو clipman.

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