基本理论请直接找书看,这里直接给例子,欢迎大家学习、讨论、或指点改进
在保证上文代码不变的基础上,增加GUI外衣
针对工厂公司增加了用户服务部,用户服务部内部分为铣刀客服组MillForm和钻头客服组DrillForm以及策略服务中心StrategyToolForm
#文件名:toolform.py
# -*- coding: utf-8 -*-
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
from future_builtins import *
from tool import *
#from PyQt4.QtGui import *
#from PyQt4.QtCore import *
import sys
from PySide.QtCore import *
from PySide.QtGui import *
import string
import gc
QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))
class ToolForm(QWidget):
def __init__(self, parent=None):
super(ToolForm, self).__init__(parent)
self.setAttribute(Qt.WA_DeleteOnClose)
self.name=None
self.diameter=0
self.parent=parent
self.main_layout=QGridLayout(self.parent)
name_label=QLabel(("名称:"))
self.name_value=QLineEdit()
self.main_layout.addWidget(name_label,0,0)
self.main_layout.addWidget(self.name_value,0,1)
diameter_label=QLabel(("直径:"))
self.diameter_value=QLineEdit()
self.main_layout.addWidget(diameter_label,1,0)
self.main_layout.addWidget(self.diameter_value,1,1)
def make(self):
self.name=self.name_value.text()
print(self.diameter_value.text())
self.diameter=string.atof(self.diameter_value.text())
class MillForm(ToolForm):
def __init__(self, parent=None):
super(MillForm, self).__init__(parent)
self.setAttribute(Qt.WA_DeleteOnClose)
self.setWindowTitle('铣刀')
def make(self):
super(MillForm,self).make()
tool=MillTool(self.name,self.diameter)
str=tool.make()
return str
class DrillForm(ToolForm):
def __init__(self, parent=None):
super(DrillForm, self).__init__(parent)
self.setWindowTitle('钻头')
self.setAttribute(Qt.WA_DeleteOnClose)
self.drill=0
drill_label=QLabel(("锥度:"))
self.drill_value=QLineEdit()
self.main_layout.addWidget(drill_label,2,0)
self.main_layout.addWidget(self.drill_value,2,1)
def make(self):
super(DrillForm,self).make()
self.drill=string.atof(self.drill_value.text())
tool=DrillTool(self.name,self.diameter,self.drill)
return tool.make()
#if (__name__== "__main__"):
#app = QApplication(sys.argv)
#widget=QWidget()
#form = MillForm(widget)
#widget.show()
#app.exec_()
class StrategyToolForm(object):
def __init__(self,tool_type,parent=None):
super(StrategyToolForm,self).__init__()
self.parent=parent
self.tool_type=tool_type
if self.tool_type=='mill':
self.tool=MillForm(parent)
elif self.tool_type=='drill':
self.tool=DrillForm(parent)
else:
print('error in strategy')
def make(self):
return self.tool.make()
if (__name__=="__main__"):
app = QApplication(sys.argv)
widget=QWidget()
strategy =StrategyToolForm('drill',widget)
widget.show()
app.exec_()
#客户端:
#文件名:client.py
# -*- coding: utf-8 -*-
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
from future_builtins import *
import sys
from PySide.QtCore import *
from PySide.QtGui import *
from toolform import *
import gc
QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))
class Form(QDialog):
def __init__(self, parent=None):
super(Form, self).__init__(parent)
self.setAttribute(Qt.WA_DeleteOnClose)
self.main_layout=QGridLayout(self)
self.tool=None
self.ls=list()
self.strategy=None
type_label=QLabel(("请选择刀具类型"))
self.main_layout.addWidget(type_label,0,0)
self.type_tool=QComboBox()
#str=QString("None,mill,drill")
self.zjm=QPushButton()
self.type_tool.addItems(['None','mill','drill'])
self.main_layout.addWidget(self.type_tool,0,1)
self.widget=QWidget()
self.main_layout.addWidget(self.widget,1,0,1,2)
self.information=QLabel()
self.main_layout.addWidget(self.information,2,0,1,2)
self.makeButton=QPushButton("制造")
self.main_layout.addWidget(self.makeButton,2,3)
self.type_tool.currentIndexChanged.connect(self.choose)
#self.connect(type_tool,SIGNAL("currentIndexChanged(QString) "),self.choose)
self.makeButton.clicked.connect(self.make)
self.lsout=list()
self.lsout.append(self.main_layout)
#while 1:
#self.type_tool.setCurrentIndex(1)
#self.type_tool.setCurrentIndex(2)
@Slot()
def make(self):
if self.strategy!=None:
str=self.strategy.make()
self.information.setText(self.information.text()+"\n\r"+str)
@Slot(str)
def choose(self, str):
text=self.type_tool.currentText()
print(text)
if text!='None':
self.main_layout.removeWidget(self.widget)
self.widget.hide()
del self.widget
self.widget=QWidget()
self.strategy =StrategyToolForm(text,self.widget)
self.main_layout.addWidget(self.widget,1,0,1,2)
else:
self.strategy=None
pass
gc.collect()
if (__name__== "__main__"):
#gc.set_threshold(5,5,5)
app = QApplication(sys.argv)
form = Form()
form.setWindowTitle('刀具生产')
form.show()
app.exec_()