这两天在学pyqt,就想动手做点小东西,参考pyqt上一个网格布局的例子做了个简单的计算器.
贴上代码:
#!/usr/bin/python
#gridlayout.py
# coding=utf8
import sys
from PyQt4 import QtGui,QtCore
class GridLayout(QtGui.QWidget):
def __init__(self,parent=None):
QtGui.QWidget.__init__(self)
self.setWindowTitle('calculator')
names=['Cls','Bck','','Close','7','8','9','/','4','5','6','*','1','2','3','-','0','.','=','+']
grid=QtGui.QGridLayout()
j=0
pos=[(0,0),(0,1),(0,2),(0,3),
(1,0),(1,1),(1,2),(1,3),
(2,0),(2,1),(2,2),(2,3),
(3,0),(3,1),(3,2),(3,3),
(4,0),(4,1),(4,2),(4,3)]
button={}
for i in names:
button[i]=QtGui.QPushButton(i)
if j==2:
grid.addWidget(QtGui.QLabel(' '),0,2)
else:
grid.addWidget(button[i],pos[j][0],pos[j][1])
j=j+1
vbox=QtGui.QVBoxLayout()
self.lcd=QtGui.QLineEdit()
vbox.addWidget(self.lcd)
vbox.addLayout(grid)
self.setLayout(vbox)
self.setFocus()
for i in names:
button[i].clicked.connect(self.shownum)
self.connect(button["Close"], QtCore.SIGNAL("clicked()"),QtGui.qApp,QtCore.SLOT('quit()'))
def shownum(self):
senderc=self.sender()
if senderc.text()=='Cls': self.lcd.setText('')
elif senderc.text()=='Bck': self.lcd.setText(self.lcd.text()[:-1])
elif senderc.text()=='=':
c=self.lcd.text()
d=["+","-","*","/"]
for i in d:
h=str(c).find(i)
print h
if h>0: break
a=str(c).split(i)
print a
if i=="+":
b=int(a[0])+int(a[1])
if i=="-":
b=int(a[0])-int(a[1])
if i=="*":
b=int(a[0])*int(a[1])
print b
if i=="/":
b=int(a[0])/int(a[1])
print c
self.lcd.setText(c+senderc.text()+str(b))
else:
self.lcd.setText(self.lcd.text()+senderc.text())
app=QtGui.QApplication(sys.argv)
qb=GridLayout()
qb.show()
sys.exit(app.exec_())