用 Pyside 绘制填充椭圆
Painting filled ellipse with Pyside
我正在尝试在 pyside 中绘制一个纯色椭圆,但我在外面发现了一条意想不到的黑线,而且我也没有得到看起来是光滑圆形的东西?有些颜色也没有显示。
我做错了什么?
import sys
from PySide import QtGui, QtCore
class Example(QtGui.QDialog):
def __init__(self, parent=None):
super(Example, self).__init__(parent)
self.resize(200, 50)
self.initUI()
def initUI(self):
self.ui_list = QtGui.QComboBox()
grid = QtGui.QVBoxLayout()
grid.addWidget(self.ui_list)
self.setLayout(grid)
self.populate_list()
def populate_list(self):
colors = {
'White': QtCore.Qt.white,
'Black': QtCore.Qt.black,
'Red': QtCore.Qt.red,
'Green': QtCore.Qt.green,
'Blue': QtCore.Qt.blue,
'Cyan': QtCore.Qt.cyan,
'Magenta': QtCore.Qt.magenta,
'Yellow': QtCore.Qt.yellow,
'Gray': QtCore.Qt.gray,
'Orange': QtGui.QColor(255,128,0)
}
px = QtGui.QPixmap(12,12)
for key, val in sorted(colors.items()):
px.fill(QtCore.Qt.transparent)
painter = QtGui.QPainter(px)
painter.setBrush(QtGui.QColor(val))
painter.drawEllipse(0,0,12,12)
self.ui_list.addItem(QtGui.QIcon(px), key)
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
你必须使用更大的QPixmap
,此外你必须调用painter.end()
来表明你必须完成绘画:
class Example(QtGui.QDialog):
def __init__(self, parent=None):
super(Example, self).__init__(parent)
self.resize(200, 50)
self.initUI()
def initUI(self):
self.ui_list = QtGui.QComboBox()
grid = QtGui.QVBoxLayout()
grid.addWidget(self.ui_list)
self.setLayout(grid)
self.populate_list()
def populate_list(self):
colors = {
'White': QtCore.Qt.white,
'Black': QtCore.Qt.black,
'Red': QtCore.Qt.red,
'Green': QtCore.Qt.green,
'Blue': QtCore.Qt.blue,
'Cyan': QtCore.Qt.cyan,
'Magenta': QtCore.Qt.magenta,
'Yellow': QtCore.Qt.yellow,
'Gray': QtCore.Qt.gray,
'Orange': QtGui.QColor(255,128,0)
}
px = QtGui.QPixmap(640,640)
for key, val in sorted(colors.items()):
px.fill(QtCore.Qt.transparent)
painter = QtGui.QPainter(px)
painter.setBrush(QtGui.QColor(val))
painter.drawEllipse(px.rect())
painter.end()
self.ui_list.addItem(QtGui.QIcon(px), key)
仅查看已批准的答案,在我看来轮廓是黑色的,设置较大的像素图会使问题不那么明显。我最好改为设置描边颜色。此外,如果您明确打开抗锯齿功能,则无需为了获得更好看的圆圈而增大像素图。
...
for key, val in sorted(colors.items()):
# a small pixmap size
size = 32
px = QtGui.QPixmap(size,size)
px.fill(QtCore.Qt.transparent)
painter = QtGui.QPainter(px)
# turn on Antialiasing
painter.setRenderHints(QtGui.QPainter.Antialiasing, True)
# set the brush and pen to the same color
painter.setBrush(QtGui.QColor(val))
painter.setPen(QtGui.QColor(val))
painter.drawEllipse(px.rect())
painter.end()
self.ui_list.addItem(QtGui.QIcon(px), key)
我正在尝试在 pyside 中绘制一个纯色椭圆,但我在外面发现了一条意想不到的黑线,而且我也没有得到看起来是光滑圆形的东西?有些颜色也没有显示。
我做错了什么?
import sys
from PySide import QtGui, QtCore
class Example(QtGui.QDialog):
def __init__(self, parent=None):
super(Example, self).__init__(parent)
self.resize(200, 50)
self.initUI()
def initUI(self):
self.ui_list = QtGui.QComboBox()
grid = QtGui.QVBoxLayout()
grid.addWidget(self.ui_list)
self.setLayout(grid)
self.populate_list()
def populate_list(self):
colors = {
'White': QtCore.Qt.white,
'Black': QtCore.Qt.black,
'Red': QtCore.Qt.red,
'Green': QtCore.Qt.green,
'Blue': QtCore.Qt.blue,
'Cyan': QtCore.Qt.cyan,
'Magenta': QtCore.Qt.magenta,
'Yellow': QtCore.Qt.yellow,
'Gray': QtCore.Qt.gray,
'Orange': QtGui.QColor(255,128,0)
}
px = QtGui.QPixmap(12,12)
for key, val in sorted(colors.items()):
px.fill(QtCore.Qt.transparent)
painter = QtGui.QPainter(px)
painter.setBrush(QtGui.QColor(val))
painter.drawEllipse(0,0,12,12)
self.ui_list.addItem(QtGui.QIcon(px), key)
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
你必须使用更大的QPixmap
,此外你必须调用painter.end()
来表明你必须完成绘画:
class Example(QtGui.QDialog):
def __init__(self, parent=None):
super(Example, self).__init__(parent)
self.resize(200, 50)
self.initUI()
def initUI(self):
self.ui_list = QtGui.QComboBox()
grid = QtGui.QVBoxLayout()
grid.addWidget(self.ui_list)
self.setLayout(grid)
self.populate_list()
def populate_list(self):
colors = {
'White': QtCore.Qt.white,
'Black': QtCore.Qt.black,
'Red': QtCore.Qt.red,
'Green': QtCore.Qt.green,
'Blue': QtCore.Qt.blue,
'Cyan': QtCore.Qt.cyan,
'Magenta': QtCore.Qt.magenta,
'Yellow': QtCore.Qt.yellow,
'Gray': QtCore.Qt.gray,
'Orange': QtGui.QColor(255,128,0)
}
px = QtGui.QPixmap(640,640)
for key, val in sorted(colors.items()):
px.fill(QtCore.Qt.transparent)
painter = QtGui.QPainter(px)
painter.setBrush(QtGui.QColor(val))
painter.drawEllipse(px.rect())
painter.end()
self.ui_list.addItem(QtGui.QIcon(px), key)
仅查看已批准的答案,在我看来轮廓是黑色的,设置较大的像素图会使问题不那么明显。我最好改为设置描边颜色。此外,如果您明确打开抗锯齿功能,则无需为了获得更好看的圆圈而增大像素图。
...
for key, val in sorted(colors.items()):
# a small pixmap size
size = 32
px = QtGui.QPixmap(size,size)
px.fill(QtCore.Qt.transparent)
painter = QtGui.QPainter(px)
# turn on Antialiasing
painter.setRenderHints(QtGui.QPainter.Antialiasing, True)
# set the brush and pen to the same color
painter.setBrush(QtGui.QColor(val))
painter.setPen(QtGui.QColor(val))
painter.drawEllipse(px.rect())
painter.end()
self.ui_list.addItem(QtGui.QIcon(px), key)