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文件运行。
  • 相关阅读:
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 695 岛屿的最大面积(DFS)
    Java实现 LeetCode 695 岛屿的最大面积(DFS)
    PHP serialize() 函数
    PHP print_r() 函数
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/4903459.html
Copyright © 2011-2022 走看看