设计模式三(采用pyside为设计模式一、二增加GUI外衣 )
来源:互联网 发布:反刍动物牛羊配方软件 编辑:程序博客网 时间:2024/04/28 17:03
基本理论请直接找书看,这里直接给例子,欢迎大家学习、讨论、或指点改进
在保证上文代码不变的基础上,增加GUI外衣
针对工厂公司增加了用户服务部,用户服务部内部分为铣刀客服组MillForm和钻头客服组DrillForm以及策略服务中心StrategyToolForm
#文件名:toolform.py# -*- coding: utf-8 -*-from __future__ import divisionfrom __future__ import print_functionfrom __future__ import unicode_literalsfrom future_builtins import *from tool import *#from PyQt4.QtGui import *#from PyQt4.QtCore import *import sysfrom PySide.QtCore import *from PySide.QtGui import *import stringimport gcQTextCodec.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 divisionfrom __future__ import print_functionfrom __future__ import unicode_literalsfrom future_builtins import *import sysfrom PySide.QtCore import *from PySide.QtGui import *from toolform import *import gcQTextCodec.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_()
- 设计模式三(采用pyside为设计模式一、二增加GUI外衣 )
- 设计模式七(采用pyside实现模式六的GUI)
- 设计模式二(策略模式,采用python实现)
- 采用设计模式理由
- 设计模式一(简单工厂,采用python实现)
- 三、设计模式之二----Builder模式
- 设计模式(三)
- 设计模式(三)
- 设计模式 (三)
- 设计模式(三)
- 设计模式(三)
- 设计模式(三)
- 设计模式(三)
- 设计模式(二)
- 设计模式(二)
- 设计模式(二)
- 设计模式(二)
- 设计模式(二)
- cocos2d-x坐标系
- first
- PHP学习——第一章
- 一个空类被编译器编译后产生了哪些默认函数
- 谁动了我的cpu——oprofile使用札记
- 设计模式三(采用pyside为设计模式一、二增加GUI外衣 )
- 迅雷(7.2.11.3788)软件在Win8专业版中启动崩溃的解决办法
- SliverLight使用摄像头拍照并上传到数据库
- [程序语言] 小甲鱼:零基础入门学习Delphi讲全集
- The First Day——暨三人表决器的VHDL实现
- delphi 大小写字符串转换
- Android将“.c”后缀名改为“.cpp”时,NDK发生的错误
- 兼容FireFox/IE的insertAdjacentHTML方法
- C语言中内存的动态管理——malloc和free