zoukankan      html  css  js  c++  java
  • PyQt4 HardwareManager

    #                            PyQt4 HardwareManager
    # 声明:
    #     本软件主要是由于朋友说想要一个产品缺陷记录软件,主要用于记录产品缺陷,
    # 通过产品序列号进行插入、查询,本来想用VC++ 6.0做,但是每次打开开发环境就
    # 奔溃了,所以只能换一个开发环境,于是尝试用PyQt4进行原型开发,在开发过程中
    # 发现,这确实是一个很好的思路,该软件可以换一种思路用于其他环境下,但就
    # 目前而已,这仅仅是一个原型。
    #
    #                                    2015-10-23 晴 深圳 南山平山村 曾剑锋
    
    
                        \\\\\\-*- 目录 -*-////////////
                        |  一、cat main.pyw
                        |  二、cat HardwareDialog.pyw
                        |  三、cat Ui_HardwareManager.pyw
                        |  四、cat hardwaremanager.ui
                        |  五、cat autorun.bat
                        |  六、cat readme.txt
                        ------------------------------------
    
    
    一、cat main.pyw
        #coding=utf-8
        
        # 参考文章:
        #   1. pyqt 使用 Qt Designer 设计的ui文件
        #       http://blog.csdn.net/lainegates/article/details/8656145
        #   2. PyQt 4.11.4 Reference Guide Using Qt Designer
        #       http://pyqt.sourceforge.net/Docs/PyQt4/designer.html
        #   3. Create dynamic button in PyQt
        #       http://stackoverflow.com/questions/10730131/create-dynamic-button-in-pyqt
        #   4. How can I hide the console window in a PyQt app running on Windows?
        #       http://stackoverflow.com/questions/466203/how-can-i-hide-the-console-window-in-a-pyqt-app-running-on-windows
        #   5. pyqt如何关闭dos窗口
        #       http://www.wosoni.com/osk/230860_91298.html
        
        import sys
        from PyQt4.QtCore import *
        from PyQt4.QtGui import *
        
        from HardwareDialog import HardwareDialog
        
        def main():
        
            app = QApplication(sys.argv)
            app.setWindowIcon(QIcon("./logo.ico"))
        
            hardwareDialog = HardwareDialog()
            hardwareDialog.show()
        
            sys.exit(app.exec_())
        
        if __name__ == '__main__':
            main()
    
    二、cat HardwareDialog.pyw
        #coding=utf-8
        
        import sys
        import os
        import time
        from PyQt4.QtCore import *
        from PyQt4.QtGui import *
        import sqlite3
        
        from ui_hardwaremanager import Ui_HardwareManager
        
        class HardwareDialog(QDialog):
        
            def __init__(self):
        
                QDialog.__init__(self)
        
                self.ui = Ui_HardwareManager()
                self.ui.setupUi(self)
        
                self.setWindowTitle("HardwareManager")
                self.setFixedHeight(self.height())
                self.setFixedWidth(self.width())
                self.setWindowFlags(self.windowFlags() & ~Qt.WindowContextHelpButtonHint);
        
                # http://stackoverflow.com/questions/10730131/create-dynamic-button-in-pyqt
                # Error: TypeError: connect() slot argument should be a callable or a signal, not 'NoneType' #
                # Note the lambda will avoid the evaluation of the function call, so it'll call
                # self.commander(command) only when clicked
                # self.ui.insert.clicked.connect(lambda: self.insertData())
                self.ui.insert.clicked.connect(self.insertData)
                self.ui.query.clicked.connect(self.queryData)
                self.ui.clean.clicked.connect(self.cleanData)
        
                self.cpFilePath = ""
        
            def insertData(self):
        
                # 这里必须这么处理一下才能将serial插入sqlite3数据,否则总是会报如下错误:
                #   sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.
                serial = ("%s" % (self.ui.serial.text())).strip()
                filePath = time.strftime("%Y%m%d%H%M%S", time.localtime(time.time()))
        
                # To prevent the string length is less than 0
                if ( len(serial) > 0 ) :
        
                    hmConnect = sqlite3.connect("./HardwareManager.db")
                    cursor = hmConnect.cursor()
        
                    cursor.execute('CREATE TABLE if not exists HardwareManager (id INTEGER PRIMARY KEY, serial VARCHAR(40), path VARCHAR(100))')
        
                    # check serial NO. was only one
                    cursor.execute('SELECT id, path from HardwareManager where serial = ?', [serial])
                    if ( cursor.fetchone() != None ) :
                        QMessageBox.about(self, "ERROR","Please check the serial number is the only one")
                        hmConnect.close()
                        return
        
                    # insert data
                    argument=(serial, filePath)
                    cursor.execute('INSERT INTO HardwareManager (id, serial, path) VALUES(NULL, ?, ?)', argument)
                    hmConnect.commit()
        
                    # save readme data
                    readmeFilePath = "./managerFile/%s" % filePath
                    os.makedirs(readmeFilePath)
                    readme = open( "%s/readme.txt" % readmeFilePath, "w" )
                    readme.write(self.ui.readme.toPlainText())
                    readme.flush()
                    readme.close()
        
                    self.ui.id.setText( "%s" % cursor.lastrowid )
                    self.ui.path.setText("%s/readme.txt" % readmeFilePath)
        
                    ## debug
                    #print argument
                    #cursor.execute('SELECT * FROM HardwareManager')
                    #print cursor.fetchall()
        
                    hmConnect.close()
        
                    # mesage for costomer
                    QMessageBox.about(self, "Mesg","Insert OK.")
        
        
            def queryData(self):
        
                serial = ("%s" % (self.ui.serial.text())).strip()
        
                if ( len(serial) > 0 ) :
        
                    hmConnect = sqlite3.connect("./HardwareManager.db")
                    cursor = hmConnect.cursor()
        
                    # create data if HardwareManager table don't exists
                    cursor.execute('CREATE TABLE if not exists HardwareManager (id INTEGER PRIMARY KEY, serial VARCHAR(40), path VARCHAR(100))')
        
                    # check data
                    cursor.execute('SELECT id, path from HardwareManager where serial = ?', [serial])
                    row = cursor.fetchone()
                    if ( row == None ) :
                        QMessageBox.about(self, "ERROR","Please check your serial number")
                        hmConnect.close()
                        return
        
                    self.ui.id.setText( "%s" % row[0] )
                    self.ui.path.setText( "./managerFile/%s/readme.txt" % row[1] )
        
                    # maybe this file has lost
                    if ( os.path.exists("./managerFile/%s/readme.txt" % row[1]) == True) :
                        readme = open( "./managerFile/%s/readme.txt" % row[1] )
                        self.ui.readme.setPlainText(readme.read())
                        readme.close()
                    else :
                        QMessageBox.about(self, "Mesg","can't find the readme.txt file")
        
                    hmConnect.close()
        
            def cleanData(self):
        
                '''
                clean EditLine widget data
                '''
        
                self.ui.id.setText("")
                self.ui.serial.setText("")
                self.ui.path.setText("")
                self.ui.readme.setPlainText("")
        
    三、cat Ui_HardwareManager.pyw
        # -*- coding: utf-8 -*-
        
        # Form implementation generated from reading ui file 'E:pythonHardWareManagerhardwaremanager.ui'
        #
        # Created by: PyQt4 UI code generator 4.11.4
        #
        # WARNING! All changes made in this file will be lost!
        
        from PyQt4 import QtCore, QtGui
        
        try:
            _fromUtf8 = QtCore.QString.fromUtf8
        except AttributeError:
            def _fromUtf8(s):
                return s
        
        try:
            _encoding = QtGui.QApplication.UnicodeUTF8
            def _translate(context, text, disambig):
                return QtGui.QApplication.translate(context, text, disambig, _encoding)
        except AttributeError:
            def _translate(context, text, disambig):
                return QtGui.QApplication.translate(context, text, disambig)
        
        class Ui_HardwareManager(object):
            def setupUi(self, HardwareManager):
                HardwareManager.setObjectName(_fromUtf8("HardwareManager"))
                HardwareManager.resize(465, 300)
                self.verticalLayout_2 = QtGui.QVBoxLayout(HardwareManager)
                self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2"))
                self.frame = QtGui.QVBoxLayout()
                self.frame.setObjectName(_fromUtf8("frame"))
                self.serialIDPath = QtGui.QGridLayout()
                self.serialIDPath.setSizeConstraint(QtGui.QLayout.SetNoConstraint)
                self.serialIDPath.setContentsMargins(20, -1, -1, -1)
                self.serialIDPath.setHorizontalSpacing(30)
                self.serialIDPath.setObjectName(_fromUtf8("serialIDPath"))
                self.label_path = QtGui.QLabel(HardwareManager)
                self.label_path.setAlignment(QtCore.Qt.AlignCenter)
                self.label_path.setObjectName(_fromUtf8("label_path"))
                self.serialIDPath.addWidget(self.label_path, 5, 0, 1, 1)
                self.label_id = QtGui.QLabel(HardwareManager)
                self.label_id.setAlignment(QtCore.Qt.AlignCenter)
                self.label_id.setObjectName(_fromUtf8("label_id"))
                self.serialIDPath.addWidget(self.label_id, 2, 0, 1, 1)
                self.pathClean = QtGui.QHBoxLayout()
                self.pathClean.setObjectName(_fromUtf8("pathClean"))
                self.path = QtGui.QLineEdit(HardwareManager)
                self.path.setObjectName(_fromUtf8("path"))
                self.pathClean.addWidget(self.path)
                self.clean = QtGui.QPushButton(HardwareManager)
                self.clean.setObjectName(_fromUtf8("clean"))
                self.pathClean.addWidget(self.clean)
                self.serialIDPath.addLayout(self.pathClean, 5, 1, 1, 1)
                self.label_serial = QtGui.QLabel(HardwareManager)
                self.label_serial.setAlignment(QtCore.Qt.AlignCenter)
                self.label_serial.setObjectName(_fromUtf8("label_serial"))
                self.serialIDPath.addWidget(self.label_serial, 1, 0, 1, 1)
                self.serial = QtGui.QLineEdit(HardwareManager)
                self.serial.setObjectName(_fromUtf8("serial"))
                self.serialIDPath.addWidget(self.serial, 1, 1, 1, 1)
                self.id = QtGui.QLineEdit(HardwareManager)
                self.id.setObjectName(_fromUtf8("id"))
                self.serialIDPath.addWidget(self.id, 2, 1, 1, 1)
                self.frame.addLayout(self.serialIDPath)
                self.insertQueryButton = QtGui.QHBoxLayout()
                self.insertQueryButton.setObjectName(_fromUtf8("insertQueryButton"))
                self.insert = QtGui.QPushButton(HardwareManager)
                self.insert.setObjectName(_fromUtf8("insert"))
                self.insertQueryButton.addWidget(self.insert)
                self.query = QtGui.QPushButton(HardwareManager)
                self.query.setObjectName(_fromUtf8("query"))
                self.insertQueryButton.addWidget(self.query)
                self.frame.addLayout(self.insertQueryButton)
                self.readme = QtGui.QPlainTextEdit(HardwareManager)
                self.readme.setObjectName(_fromUtf8("readme"))
                self.frame.addWidget(self.readme)
                self.verticalLayout_2.addLayout(self.frame)
        
                self.retranslateUi(HardwareManager)
                QtCore.QMetaObject.connectSlotsByName(HardwareManager)
                HardwareManager.setTabOrder(self.serial, self.id)
                HardwareManager.setTabOrder(self.id, self.path)
                HardwareManager.setTabOrder(self.path, self.insert)
                HardwareManager.setTabOrder(self.insert, self.query)
                HardwareManager.setTabOrder(self.query, self.readme)
                HardwareManager.setTabOrder(self.readme, self.clean)
        
            def retranslateUi(self, HardwareManager):
                HardwareManager.setWindowTitle(_translate("HardwareManager", "HardwareManager", None))
                self.label_path.setText(_translate("HardwareManager", "Path:", None))
                self.label_id.setText(_translate("HardwareManager", "ID:", None))
                self.clean.setText(_translate("HardwareManager", "Clean", None))
                self.label_serial.setText(_translate("HardwareManager", "Serial NO.:", None))
                self.insert.setText(_translate("HardwareManager", "Insert", None))
                self.query.setText(_translate("HardwareManager", "Query", None))
    
    四、cat hardwaremanager.ui
        <?xml version="1.0" encoding="UTF-8"?>
        <ui version="4.0">
         <class>HardwareManager</class>
         <widget class="QDialog" name="HardwareManager">
          <property name="geometry">
           <rect>
            <x>0</x>
            <y>0</y>
            <width>465</width>
            <height>300</height>
           </rect>
          </property>
          <property name="windowTitle">
           <string>HardwareManager</string>
          </property>
          <layout class="QVBoxLayout" name="verticalLayout_2">
           <item>
            <layout class="QVBoxLayout" name="frame">
             <item>
              <layout class="QGridLayout" name="serialIDPath">
               <property name="sizeConstraint">
                <enum>QLayout::SetNoConstraint</enum>
               </property>
               <property name="leftMargin">
                <number>20</number>
               </property>
               <property name="horizontalSpacing">
                <number>30</number>
               </property>
               <item row="5" column="0">
                <widget class="QLabel" name="label_path">
                 <property name="text">
                  <string>Path:</string>
                 </property>
                 <property name="alignment">
                  <set>Qt::AlignCenter</set>
                 </property>
                </widget>
               </item>
               <item row="2" column="0">
                <widget class="QLabel" name="label_id">
                 <property name="text">
                  <string>ID:</string>
                 </property>
                 <property name="alignment">
                  <set>Qt::AlignCenter</set>
                 </property>
                </widget>
               </item>
               <item row="5" column="1">
                <layout class="QHBoxLayout" name="pathClean">
                 <item>
                  <widget class="QLineEdit" name="path"/>
                 </item>
                 <item>
                  <widget class="QPushButton" name="clean">
                   <property name="text">
                    <string>Clean</string>
                   </property>
                  </widget>
                 </item>
                </layout>
               </item>
               <item row="1" column="0">
                <widget class="QLabel" name="label_serial">
                 <property name="text">
                  <string>Serial NO.:</string>
                 </property>
                 <property name="alignment">
                  <set>Qt::AlignCenter</set>
                 </property>
                </widget>
               </item>
               <item row="1" column="1">
                <widget class="QLineEdit" name="serial"/>
               </item>
               <item row="2" column="1">
                <widget class="QLineEdit" name="id"/>
               </item>
              </layout>
             </item>
             <item>
              <layout class="QHBoxLayout" name="insertQueryButton">
               <item>
                <widget class="QPushButton" name="insert">
                 <property name="text">
                  <string>Insert</string>
                 </property>
                </widget>
               </item>
               <item>
                <widget class="QPushButton" name="query">
                 <property name="text">
                  <string>Query</string>
                 </property>
                </widget>
               </item>
              </layout>
             </item>
             <item>
              <widget class="QPlainTextEdit" name="readme"/>
             </item>
            </layout>
           </item>
          </layout>
         </widget>
         <tabstops>
          <tabstop>serial</tabstop>
          <tabstop>id</tabstop>
          <tabstop>path</tabstop>
          <tabstop>insert</tabstop>
          <tabstop>query</tabstop>
          <tabstop>readme</tabstop>
          <tabstop>clean</tabstop>
         </tabstops>
         <resources/>
         <connections/>
        </ui>
        
    五、cat autorun.bat
        start pythonw.exe main.pyw
        exit
    
    六、cat readme.txt
        一、文件说明:
            1. managerFile目录主要是程序生成的信息文件,不要去动它;
            2. pyhon2.7目录包含了python2.7、pyqt4的安装文件;
            3. autorun.bat是windows的批处理文件,双击运行,会自动main.pyw文件;
            4. 所有的.pyw文件是python程序文件;
            5. hardwaremanager.ui文件是qt Designer生成的文件,通过pyuic4.bat将ui文件转成ui_hardwaremanager.pyw;
            6. logo.ico是程序的ico文件。
        二、程序运行说明:
            1. 可以通过双击main.pyw文件运行;
            2. 可以通过双击autorun.bat文件运行。
  • 相关阅读:
    3.09_面向对象(包、修饰符和内部类)
    3.08_面向对象(多态的概述及其代码体现)
    3.07_面向对象(继承)
    3.06_面向对象(代码块的概述和分类)
    3.05_面向对象(java文档说明书的制作过程)
    3.04_面向对象基础((main方法的格式详细解释)
    3.03_面向对象(static关键字及内存图)
    3.02面向对象(创建一个对象的步骤)
    3.01_面向对象基础(构造方法)
    2.02_Java语言基础(循环结构概述)
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/4903459.html
Copyright © 2011-2022 走看看