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:\python\HardWareManager\hardwaremanager.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文件运行。
时间: 2024-10-09 04:08:39

PyQt4 HardwareManager的相关文章

PyQt4 ShowHMDB show sqlite3 with QTableWidget summary

PyQt4 ShowHMDB show sqlite3 with QTableWidget summary Source Code: https://github.com/zengjfgit/Python 1. QDialog固定窗口大小: self.setFixedHeight(self.height()) self.setFixedWidth(self.width()) 2. QDialog设置窗口无问号: self.setWindowFlags(self.windowFlags() & ~

PyQt4开关按钮ToggleButton

PyQt4没有开关按钮部件.但是我们可以使用在特殊状态下的QPushButton部件来创建开关按钮.而所谓的开关按钮就是一个具有按下和未按下两种状态的普通赶牛.用户可以通过单击按钮来切换其开或者关的状态.在一些情形下,这个特性会非常好用. #!/usr/bin/python # -*- coding: utf-8 -*- import sys from PyQt4 import QtGui, QtCore class ToggleButton(QtGui.QWidget): def __init

ZetCode PyQt4 tutorial Dialogs

#!/usr/bin/python # -*- coding: utf-8 -*- """ ZetCode PyQt4 tutorial In this example, we receive data from a QtGui.QInputDialog dialog. author: Jan Bodnar website: zetcode.com last edited: October 2011 """ import sys from PyQ

PYQT4.12

from PyQt4 import QtGui from PyQt4 import QtCore from PyQt4.QtCore import (QDate, QFile, QFileInfo, QIODevice, QString, QStringList, QDir, QTextStream, Qt, SIGNAL) if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) startDir = QS

用 pyqt4 编写的一个翻译小工具

有时候我们在开发时遇到一些陌生的英文单词或者不容易看出某些长句的中文意思时该怎么办呢?打开桌面上的翻译软件?打开浏览器里收藏着的翻译网址或者直接贴上百度的搜索框去查?这些方法固然可以,还很常见,但如果是 linux 系统的话,很难找到像 windows 上那些公司级别来开发的成熟的翻译软件,所以只能打开浏览器来查了.浏览器一般都会装上一些翻译插件,比如我常用的 chrome 的 划词翻译,直接用这些插件来进行翻译比起打开一个翻译网站或者百度google搜索要更快,毕竟因为加载的内容更少,但这终究

[Repost]Events and Signals in PyQt4

Reference:http://zetcode.com/gui/pyqt4/eventsandsignals/ Events and Signals in PyQt4 In this part of the PyQt4 programming tutorial, we will explore events and signals occurring in applications. Events All GUI applications are event-driven. Events ar

PyQt4消息窗口

默认情况下,如果我们单击了窗口标题栏上的X标记,窗口就会被关闭.但是有些时候我们想要改变这一默认行为.比如,我们正在编辑的文件内容发生了变化,这时若单击X标记关闭窗口,编辑器就应当但出确认窗口. #!/usr/bin/python # -*- coding:utf-8 -*- import sys from PyQt4 import QtGui class MessageBox(QtGui.QWidget): def __init__(self, parent = None): QtGui.QW

PyQt4关闭窗口

一个显而易见的关闭窗口的方式是但集标题兰有上角的X标记.接下来的示例展示如何用代码来关闭程序,并简要介绍Qt的信号和槽机制. 下面是QPushButton的构造函数,我们将会在下面的示例中使用它. QPushButton(String text, QWiget parent = None) text表示将显示在按钮上的文本.parent是其父对象,用于指定按钮显示在哪个部件中.在我们的示例中,parent是一个QWidget对象. #!/usr/bin/python # -*- coding:u

PyQt4程序图标

程序图标就是一个小图片,通常显示在程序图标的左上角(ubuntu gnome在最上侧). #!/usr/bin/python # -*- coding:utf-8 -*- import sys from PyQt4 import QtGui class Icon(QtGui.QWidget): def __init__(self, parent = None): QtGui.QWidget.__init__(self, parent) self.setGeometry(300, 300, 250