<p>下面是一段代码片段,我花了两天的时间反复尝试才弄明白。我希望它能帮助像我这样的新手。我在代码中的注释也应该有帮助。</p>
<pre><code>def set_palette(pWidget, pItem):
# Get the pallet
myPalette = pWidget.palette()
defaultHost = led_dem.textEdit
if isinstance(pWidget, QPushButton):
# NOTE: Using stylesheets will temporarily change the color dialog popups push buttons
print "Instance Is: %s " %(pWidget.objectName())
# Existing colors.
bgColor = pWidget.palette().color(QPalette.Background)
fgColor = pWidget.palette().color(QPalette.Foreground)
# Convert the QColors to a string hex for use in the Stylesheet.
bg = bgColor.name()
fg = fgColor.name()
if pItem == 'Text':
# Use the color dialog with a dummy widget to obtain a new QColor for the parameter we are changing.
color = QColorDialog.getColor(defaultHost.textColor(), pWidget, 'Get Text Color')
# Convert it to a string HEX
fg = color.name()
# Update all parameters of interest
pWidget.setStyleSheet('background-color: ' + bg + ';color: ' + fg)
if pItem == 'Background':
color = QColorDialog.getColor(defaultHost.textColor(), pWidget, 'Get Background Color')
myPalette.setColor(myPalette.Base, QColor(color))
bg = color.name()
pWidget.setStyleSheet('background-color: ' + bg + ';color: ' + fg)
</code></pre>
<p>此片段显示:</p>
<ul>
<li>如何找到你正在处理的小部件类型</li>
<li>如何将<code>QColor</code>从<code>QColorDialog</code>转换为字符串十六进制格式以用于样式表;以及</li>
<li>当小部件不使用所需类型的调色板元素时,如何使用<code>QColorDialog</code>。</li>
</ul>
<p>在我的例子中,我使用<code>defaultHost = led_dem.textEdit</code>,其中<code>led_dem</code>是我的表单,而<code>textEdit</code>是表单上的<code>textEdit</code>。</p>
<p>另外,<code>pWidget</code>是完整的小部件定义,包括<code>form</code>和<code>instance</code>。</p>