2010-04-02 18 views
7

मुझे PyQt4 के साथ कोई समस्या है। मैं एक खिड़की के भीतर एक नया विजेट बनाना चाहता हूं, और मैं चाहता हूं कि इस विजेट में कस्टम रंग हो।pyQt4: QWidget subclass नए सेट स्टाइलशीट() पृष्ठभूमि रंग का जवाब नहीं दे रहा है

जब मैं QWidget क्लास का उप-वर्ग बनाता हूं, और इसे तुरंत चालू करता हूं, तो मैं setStyleSheet() फ़ंक्शन के माध्यम से अपना पृष्ठभूमि रंग बदलने में सक्षम नहीं हूं।

जब मैं एक नई QWidget ऑब्जेक्ट को तुरंत चालू करता हूं, तो मुझे इसके पृष्ठभूमि रंग को बदलने में कोई समस्या नहीं है। लेकिन मुझे एक सामान्य QWidget ऑब्जेक्ट नहीं चाहिए। मैं QWidget का अपना उप-वर्ग बनाना चाहता हूं।

जब मैं एक QPushButton का उप-वर्ग बनाता हूं, तो मैं setStyleSheet() फ़ंक्शन का उपयोग करके अपने पृष्ठभूमि रंग को बदलने में भी सक्षम हूं।

कंसोल विंडो में कोई त्रुटि संदेश या चेतावनियां नहीं हैं, यह किसी भी संकेत के बिना ठीक से काम करने से इंकार कर देती है।

तो मैं जानना चाहूंगा कि क्या वजह है कि यह है कि मैं एक विजेट की पृष्ठभूमि का रंग अगर मैं बस एक QWidget वस्तु बनाने या QPushButton, का एक उपवर्ग जब मैं QWidget का एक उपवर्ग बनाने को बदल सकते हैं, लेकिन नहीं है । और इसलिए मैं किसी ऑब्जेक्ट का पृष्ठभूमि रंग कैसे बदल सकता हूं जो QWidget का उप-वर्ग है?

क्या यह शायद पाइथन या पीईक्यूटी के संस्करण के लिए विशिष्ट है जो मैं उपयोग कर रहा हूं? क्या यह पुस्तकालय में एक बग है? या जिस तरह से मैं अपना कोड लिख रहा हूं उसमें कुछ दोष?

मैं अजगर 2.6.4 और PyQt4

उपयोग कर रहा हूँ नीचे कोड है कि मुझे परेशानी की ओर जाता है का एक उदाहरण है। खिड़की के भीतर एक दूसरे के नीचे तीन विजेट हैं। पैरेंट विजेट हरे रंग के पृष्ठभूमि रंग के साथ सेट है। शीर्ष विजेट लाल पर सेट है, मध्य एक, QWidget का उप-वर्ग है, जो नीला होना चाहिए, लेकिन यह अदृश्य दिखाई देता है क्योंकि यह किसी कारण से मूल विंडो का रंग लेता है। और नीचे विजेट QPushButton का एक उप-वर्ग है और सफेद है।

import sys 
from PyQt4 import QtGui, QtCore 


################################################################################ 
#--------------------------------------------------------- CUSTOM WIDGET CLASS 1 
class CustomWidget(QtGui.QWidget): 
    def __init__(self, parent): 
     QtGui.QWidget.__init__(self, parent) 
     # some custom properties and functions will follow 


################################################################################ 
#--------------------------------------------------------- CUSTOM WIDGET CLASS 2 
class CustomWidget2(QtGui.QPushButton): 
    def __init__(self, parent): 
     QtGui.QPushButton.__init__(self, parent) 
     # some custom properties and functions will follow 


################################################################################ 
#----------------------------------------------------------- PARENT WIDGET CLASS 
class Parent(QtGui.QWidget): 
    def __init__(self, parent=None): 
     #---------------------------------------------------------- SETUP WINDOW 
     QtGui.QWidget.__init__(self, parent) 
     self.resize(500, 340) 
     self.setStyleSheet("QWidget {background-color: #00FF00}") 

     #-------------------------------------------------- SETUP DEFAULT WIDGET 
     wid1 = QtGui.QWidget(self) 
     wid1.setGeometry(10, 10, 480, 100) 
     wid1.setStyleSheet("QWidget {background-color: #FF0000 }") 

     #------------------------------------------------- SETUP CUSTOM WIDGET 1 
     wid2 = CustomWidget(self) 
     wid2.setGeometry(10, 120, 480, 100) 
     wid2.setStyleSheet("QWidget {background-color: #0000FF }") 


     #------------------------------------------------- SETUP CUSTOM WIDGET 2 
     wid3 = CustomWidget2(self) 
     wid3.setGeometry(10, 230, 480, 100) 
     wid3.setStyleSheet("QWidget {background-color: #FFFFFF }") 


################################################################################ 
#-------------------------------------------------------------------------- MAIN 
app = QtGui.QApplication(sys.argv) 
win = Parent() 
win.show() 
app.exec_() 

उत्तर

5

ठीक है, मैं एक समाधान की खोज की, मैं जानता हूँ कि अगर अपने सबसे अच्छे रूप में एक या नहीं, इसलिए यदि किसी और को कोई सुझाव है, एक टिप्पणी छोड़ कृपया नहीं है।

शो() और setAutoFillBackground (सच) QWidget उपवर्ग वस्तु के लिए तरीकों बुला करके, मैं रंग दिखाने के लिए मिल सकता है। उदाहरण के लिए:

wid2.setStyleSheet("QWidget {background-color: #0000FF }") 
    wid2.show() 
    wid2.setAutoFillBackground(True) 
0

अब इस अधिकार का परीक्षण करने के लिए, लेकिन अगर मैं सही ढंग से याद है, मैं मुद्दों जब विजेट वर्ग नामकरण, और भी {} का उपयोग करते समय समूहीकरण जब im केवल एक स्टाइलशीट विशेषता जोड़ने के लिए किया था एक जगह में नहीं है।

अपने कोड चलाने की कोशिश करें, लेकिन इसके बजाय क्या आप का उपयोग किया है की:

self.setStyleSheet("background-color: #00FF00") 

या अगर अपनी कई विशेषताओं, उपयोग:

self.setStyleSheet("background-color: #00FF00; color: #FFFFFF") 
2

this के अनुसार आप उपवर्ग जब QWidget आप करने के लिए है पेंटएवेंट हैंडलर को कार्यान्वित करें।

class CustomWidget(QtGui.QWidget): 
    def __init__(self, parent): 
     QtGui.QWidget.__init__(self, parent) 
     # some custom properties and functions will follow 
    def paintEvent(self, event): 
     opt = QStyleOption() 
     opt.init(self) 
     painter = QPainter(self) 
     self.style().drawPrimitive(QStyle.PE_Widget, opt, painter, self) 
+0

विकल्प के लिए इनिट 'opt.init से (स्वयं)' होना चाहिए। – Algorys

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