मैं वर्तमान में क्यूटी डिजाइनर का उपयोग कर एक गुई पर काम कर रहा हूं। मैं सोच रहा हूं कि मुझे गुई पर स्ट्रिंग्स प्रिंटिंग के बारे में कैसे जाना चाहिए जो लॉग विंडो की तरह काम करता है। मैं pyqt5pyqt में लॉग प्रदर्शित करने का सबसे अच्छा तरीका?
उत्तर
का उपयोग कर रहा हूं जैसे लगता है कि आप QPlainTextEdit विजेट केवल पढ़ने के लिए सेट करना चाहते हैं।
उपयोगकर्ता को यह संकेत देने के लिए भूरे रंग के पृष्ठभूमि रंग को बदलने पर विचार करें कि यह संपादन योग्य नहीं है। यदि आप स्क्रॉल करने योग्य या पाठ चुनने योग्य होना चाहते हैं तो यह आपके ऊपर भी है।
This answer आउटपुट के साथ स्क्रॉल करने के लिए QPlainTextEdit को उपclassing शुरू कर सकते हैं, फ़ाइल में सहेज सकते हैं, जो भी हो।
आप आसानी से एक कस्टम प्रवेश हैंडलर कि (के रूप में क्रिस्टोफर द्वारा वर्णित) एक QPlainTextEdit
उदाहरण के लिए के माध्यम से लॉग संदेशों गुजरता बना सकते हैं करने के लिए अजगर logging
मॉड्यूल उपयोग कर रहे हैं।
ऐसा करने के लिए आप पहले logging.Handler
उपclass। इस __init__
में हम QPlainTextEdit
बनाते हैं जिसमें लॉग होंगे। यहां महत्वपूर्ण बात यह है कि हैंडल emit()
फ़ंक्शन के माध्यम से संदेश प्राप्त करेगा। इसलिए हम इस फ़ंक्शन को अधिभारित करते हैं और संदेश टेक्स्ट को QPlainTextEdit
में पास करते हैं।
import logging
class QPlainTextEditLogger(logging.Handler):
def __init__(self, parent):
super(Logger, self).__init__()
self.widget = QPlainTextEdit(parent)
self.widget.setReadOnly(True)
def emit(self, record):
msg = self.format(record)
self.widget.textCursor().appendPlainText(msg)
def write(self, m):
pass
इस वर्ग से एक वस्तु बनाने के लिए, यह QPlainTextEdit
(जैसे मुख्य विंडो, या एक लेआउट) के लिए माता-पिता गुजर। फिर आप वर्तमान हैंगर के लिए इस हैंडलर को जोड़ सकते हैं।
# Set up logging to use your widget as a handler
log_handler = QPlainTextEditLogger(<parent widget>)
logging.getLogger().addHandler(log_handler)
यहां एक संपूर्ण काम कर उदाहरण mfitzp's answer के आधार पर दिया गया है:
import sys
from PyQt4 import QtCore, QtGui
import logging
# Uncomment below for terminal log messages
# logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(name)s - %(levelname)s - %(message)s')
class QPlainTextEditLogger(logging.Handler):
def __init__(self, parent):
super().__init__()
self.widget = QtGui.QPlainTextEdit(parent)
self.widget.setReadOnly(True)
def emit(self, record):
msg = self.format(record)
self.widget.appendPlainText(msg)
class MyDialog(QtGui.QDialog, QPlainTextEditLogger):
def __init__(self, parent=None):
super().__init__(parent)
logTextBox = QPlainTextEditLogger(self)
# You can format what is printed to text box
logTextBox.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
logging.getLogger().addHandler(logTextBox)
# You can control the logging level
logging.getLogger().setLevel(logging.DEBUG)
self._button = QtGui.QPushButton(self)
self._button.setText('Test Me')
layout = QtGui.QVBoxLayout()
# Add the new logging box widget to the layout
layout.addWidget(logTextBox.widget)
layout.addWidget(self._button)
self.setLayout(layout)
# Connect signal to slot
self._button.clicked.connect(self.test)
def test(self):
logging.debug('damn, a bug')
logging.info('something to remember')
logging.warning('that\'s not right')
logging.error('foobar')
if (__name__ == '__main__'):
app = None
if (not QtGui.QApplication.instance()):
app = QtGui.QApplication([])
dlg = MyDialog()
dlg.show()
dlg.raise_()
if (app):
app.exec_()
यह एक बेवकूफ सवाल हो सकता है, लेकिन 'MyDialog' में' QPlainTextEditLogger' से विरासत का उद्देश्य क्या है? मैं इस उदाहरण को PyQt5 में बदलने की कोशिश कर रहा हूं, और इसे दूसरी विरासत को हटाए बिना काम करने के लिए नहीं मिल सका। ऐसा लगता है कि इसके बिना ठीक काम करता है। –
- 1. अपाचे में पोस्ट डेटा लॉग करने का सबसे अच्छा तरीका?
- 2. डिफ़ॉल्ट लॉग-ऑन उपयोगकर्ता को डिफ़ॉल्ट.ctp में प्रदर्शित करने का सबसे अच्छा तरीका?
- 3. स्थान प्रदर्शित करने का सबसे आसान तरीका?
- 4. किसी iPhone ऐप में डीबग जानकारी लॉग करने का सबसे अच्छा तरीका क्या है?
- 5. डेटा कैश करने का सबसे अच्छा तरीका
- 6. फ्लोट पार्स करने का सबसे अच्छा तरीका?
- 7. PHP हुक करने का सबसे अच्छा तरीका
- 8. डाउनलोड शुरू करने का सबसे अच्छा तरीका?
- 9. स्ट्रिंगस्ट्रीम खाली करने का सबसे अच्छा तरीका?
- 10. क्यूटी में एचटीएमएल का विश्लेषण करने का सबसे अच्छा तरीका?
- 11. LINQ में गणना() का उपयोग करने का सबसे अच्छा तरीका?
- 12. NHibernate में सत्र का प्रबंधन करने का सबसे अच्छा तरीका?
- 13. सी ++ का सबसे अच्छा तरीका
- 14. डेटाबेस संचालित सामग्री का अनुवाद करने का सबसे अच्छा तरीका
- 15. डेल्फी 200 9 में पीडीएफ फ़ाइल प्रदर्शित करने का सबसे अच्छा तरीका क्या है
- 16. रेल - केवल उत्पादन में कोड प्रदर्शित करने का सबसे अच्छा तरीका?
- 17. वीएसएस से सबवर्सन में माइग्रेट करने का सबसे अच्छा तरीका?
- 18. डीबी में संदर्भित स्थिरांक स्टोर करने का सबसे अच्छा तरीका?
- 19. परियोजनाओं में मास्टरपेज साझा करने का सबसे अच्छा तरीका
- 20. डीबी (पोस्टफिक्स) में मेल स्टोर करने का सबसे अच्छा तरीका
- 21. hbase में पदानुक्रमित डेटा स्टोर करने का सबसे अच्छा तरीका
- 22. एचटीएमएल 5 कैनवास में परत करने का सबसे अच्छा तरीका?
- 23. जावास्क्रिप्ट में स्ट्रिंग की तुलना करने का सबसे अच्छा तरीका?
- 24. ओरेकल में बहु-पंक्ति सम्मिलित करने का सबसे अच्छा तरीका?
- 25. डाटाबेस में एकाधिक ध्वज स्टोर करने का सबसे अच्छा तरीका
- 26. जेएमटर में रैंप करने का सबसे अच्छा तरीका?
- 27. स्क्लेल्चेमी में enum करने का सबसे अच्छा तरीका?
- 28. क्लोजर में जीयूआई करने का सबसे अच्छा तरीका क्या है?
- 29. कई फ़ाइलों में खोजने/प्रतिस्थापित करने का सबसे अच्छा तरीका?
- 30. NSTextView में प्रमुख ईवेंट कैप्चर करने का सबसे अच्छा तरीका?
बिंग उन [यहां] जाना चाहिए (http://stackoverflow.com/questions/24469662/how-to-redirect-logger- आउटपुट-इन-पीईटीटी-टेक्स्ट-विजेट): पी – Carel