环境 Python 3.3 ,PySide
IDE PyCharm
最近,有些同学喊我把Qt的一些例子改写成Python的,我刚好有点点时间就尝试一下,书是linux窗口程序设计---Qt4精彩实例分析,由于前30列子都有人搞了,我就从32开始
先贴代码
__author__ = '375159507@qq.com'
try:
from PySide import QtCore
from PySide import QtGui
except ImportError:
from PyQt4 import QtCore
from PyQt4 import QtGui
class PainArea(QtGui.QWidget):
def __init__(self):
super(PainArea,self).__init__()
self.setPalette(QtCore.Qt.white)
self.setAutoFillBackground(True)
self.setMinimumSize(400,400)
self.path = QtGui.QPainterPath()
self.path.addRect(150,150,100,100)
self.path.moveTo(100,100)
self.path.cubicTo(300,100,200,200,300,300)
self.path.cubicTo(100,300,200,200,100,100)
self.width = 1
self.pencolor = QtCore.Qt.red
self.brushcolor = QtCore.Qt.blue
self.rule = QtCore.Qt.OddEvenFill
def setFillRule(self,newrule):
self.rule = QtCore.Qt.FillRule(newrule)
self.update()
def setPenWidth(self,newwidth):
self.width = newwidth
self.update()
def setPenColor(self,newcolor):
self.pencolor = newcolor
self.update()
def setBrushColor(self,newcolor):
self.brushcolor = newcolor
self.update()
def paintEvent(self,e):
p = QtGui.QPainter(self)
self.path.setFillRule(self.rule)
pen = QtGui.QPen()
pen.setColor(self.pencolor)
pen.setWidth(self.width)
p.setPen(pen)
p.setBrush(self.brushcolor)
p.drawPath(self.path)
class MainWindow(QtGui.QWidget):
def __init__(self):
super(MainWindow,self).__init__()
self.area = PainArea()
self.createCtrlWidget()
self.mainlayout()
def slotpenColor(self):
newcolor = QtGui.QColorDialog.getColor()
if newcolor:
self.penColorFrame.setPalette(newcolor)
self.area.setPenColor(newcolor)
else:
newcolor = QtCore.Qt.blue
self.area.setPenColor(newcolor)
def slotbrushColor(self):
newcolor = QtGui.QColorDialog.getColor()
if newcolor:
self.brushColorFrame.setPalette(newcolor)
self.area.setBrushColor(newcolor)
else:
newcolor = QtCore.Qt.blue
self.area.setBrushColor(newcolor)
def slotFill(self,indx):
activedIndx = indx
if activedIndx == -1:
return
setRule = self.fillRuleComBox.itemData(activedIndx)
self.area.setFillRule(setRule)
def slotPenWidth(self,width):
newwidth = width
if newwidth:
self.area.setPenWidth(newwidth)
else:
return
def createCtrlWidget(self):
self.penColorText = QtGui.QLabel("画笔颜色 :")
self.penColorFrame = QtGui.QFrame()
self.penColorFrame.setAutoFillBackground(True)
self.penColorFrame.setPalette(QtGui.QPalette(QtCore.Qt.red))
self.penColorPushButton = QtGui.QPushButton()
self.penColorPushButton.setText("更改")
self.penColorPushButton.clicked.connect(self.slotpenColor)
self.brushColorText = QtGui.QLabel("画刷颜色 :")
self.brushColorFrame = QtGui.QFrame()
self.brushColorFrame.setAutoFillBackground(True)
self.brushColorFrame.setPalette(QtGui.QPalette(QtCore.Qt.blue))
self.brushColorPushButton = QtGui.QPushButton("更改")
self.brushColorPushButton.clicked.connect(self.slotbrushColor)
self.fillRuleText = QtGui.QLabel("选择填充方式 :")
self.fillRuleComBox = QtGui.QComboBox()
self.fillRuleComBox.addItem("OldEven",QtCore.Qt.OddEvenFill)
self.fillRuleComBox.addItem("Winding",QtCore.Qt.WindingFill)
self.fillRuleComBox.currentIndexChanged.connect(self.slotFill)
self.penWidthText = QtGui.QLabel("画笔宽度 :")
self.penwidthspinBox = QtGui.QSpinBox()
self.penwidthspinBox.setRange(1,10)
self.penwidthslider = QtGui.QSlider(QtCore.Qt.Horizontal)
self.penwidthslider.setRange(1,10)
self.penwidthspinBox.valueChanged.connect(self.penwidthslider.setValue)
self.penwidthslider.valueChanged.connect(self.penwidthspinBox.setValue)
self.penwidthslider.valueChanged.connect(self.slotPenWidth)
def mainlayout(self):
self.rightLayout = QtGui.QGridLayout()
self.rightLayout.addWidget(self.penColorText,0,0)
self.rightLayout.addWidget(self.penColorFrame,0,1)
self.rightLayout.addWidget(self.penColorPushButton,0,2)
self.rightLayout.addWidget(self.brushColorText,1,0)
self.rightLayout.addWidget(self.brushColorFrame,1,1)
self.rightLayout.addWidget(self.brushColorPushButton,1,2)
self.rightLayout.addWidget(self.fillRuleText,2,0)
self.rightLayout.addWidget(self.fillRuleComBox,2,1)
self.rightLayout.addWidget(self.penWidthText,3,0)
self.rightLayout.addWidget(self.penwidthspinBox,3,1)
self.rightLayout.addWidget(self.penwidthslider,3,2)
self.rightLayout.rowStretch(10)
self.leftLayout = QtGui.QHBoxLayout()
self.leftLayout.addWidget(self.area)
self.mainLayout = QtGui.QHBoxLayout()
self.mainLayout.addLayout(self.leftLayout)
self.mainLayout.addLayout(self.rightLayout)
self.setLayout(self.mainLayout)
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
mainwindow = MainWindow()
mainwindow.show()
sys.exit(app.exec_())
程序运行的效果
我现在在一个普通211大学读研,所以没有什么太大时间,我尽量一个星期一个例子,希望大家理解!