设计模式三(采用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_()    


 

原创粉丝点击