由于本人现在紧张因此python为主,以是在选择的时候,就从这方面入手。许多人在学习如何创建一个 GUI 运用的时候都感到十分的困难。个中最主要的缘故原由是,他们不知道该当从何下手。大多数的教程都只有笔墨,但事实上仅仅依赖笔墨很难学会 GUI 编程,由于 GUI 运用大多数都是基于视觉上的。
本篇文章,紧张是分享下自己在编写这个小工具过程中的心得。做出来的效果如下:
工具效果图

做出来的虽然有点简陋,但是可以做为借鉴、完善,接下来便是工具制作的方法:
1、Gui界面的制作
首先要先安装python环境,然后再eric6,涉及到这些环境的安装可以自行百度去探求方法,在此不会涉及到环境安装的方法,环境安装完成后,打开QT Designer(在eric6根目录下点击eric6.pyc或者在python根目录下点击打开eric.bat):
QT Designer
打开QT Designer后,选择Main Window,点击创建:
创建Main Window
创建好你的MainWindow后:
MainWindow
在MainWindow界面的右边QObject,那便是定义这个工具的名字的地方。这个名字将是我们通过 Python 代码调用到这个工具的变量名,以是请只管即便取一个故意义的名称。
设计完成你的界面后,点击保存,将会天生得到xxx.ui文件,这个文件可以通过cmd打开ui文件所在的路径,然后通过pyuic4 xx.ui > xx.py 可以得到xx.py文件:
天生的py文件
2、编写代码
Qt 代码是面向工具的,并且大略易学。所有我们添加的组件都是一个工具,并且都拥有自己的方法比如toPlainText()
(用来读取输入框中的值)。这让它利用起来非常方便。
在你编写代码之前,你必须要利用一些函数来进行配置。可以通过官方的例程(以及网上的一些教程)中总结出了这一小段代码来进行配置。
这些代码非常有用,每当你想要创建一个新的 PyQt 项目的时候,就在这段代码的根本上添加你自己的代码吧。
这段代码如下:
import sysfrom PyQt4 import QtCore, QtGui, uicqtCreatorFile = \"大众\"大众 # Enter file here.Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)class MyApp(QtGui.QMainWindow, Ui_MainWindow):def __init__(self):QtGui.QMainWindow.__init__(self)Ui_MainWindow.__init__(self)self.setupUi(self)if __name__ == \"大众__main__\公众:app = QtGui.QApplication(sys.argv)window = MyApp()window.show()sys.exit(app.exec_())
个中须要把稳的是:
qtCreatorFile = \公众\"大众 # Enter file here.
你须要在这里填入你先前创建的文件的地址,即便是之前天生的ui文件。这个文件将会被内置的函数载入:
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
再看下这段代码:
if __name__ == \"大众__main__\"大众:app = QtGui.QApplication(sys.argv)window = MyApp()window.show()sys.exit(app.exec_())
这段主程序创建了一个新的 Qt Gui 运用。,每个 QT 运用都可以通过命令行进行配置,以是必须传入sys.argv 参数。不过现在我们用不到这个。末了,我们创建了一个MyApp类,这个类继续于 Qt 库并且调用了父类的初始化函数:
class MyApp(QtGui.QMainWindow, Ui_MainWindow):def __init__(self):QtGui.QMainWindow.__init__(self)Ui_MainWindow.__init__(self)self.setupUi(self)
你不一定非得要理解这些代码的细节。你只须要在它的根本上连续开拓就好了。
但是最好不须要这样导入ui文件为条件下进行开拓,而是直接天生py文件根本上进行开拓,由于你后续还须要天生exe文件,至于若何实现你的功能,这部分代码可以看看自己的需求了,怎么写就怎么写了:
#此部分为天生的py文件代码self.label_21.setText(_translate(\"大众MainWindow\公众, \公众sign:\"大众, None))self.label_22.setText(_translate(\公众MainWindow\"大众, \公众bizContent:\"大众, None))self.request_button_form.setText(_translate(\公众MainWindow\"大众, \"大众Request\"大众, None))self.timestamp_select_3.setText(_translate(\"大众MainWindow\"大众, \"大众11位韶光戳\"大众, None))self.timestamp_select_4.setText(_translate(\"大众MainWindow\公众, \"大众年-月-日 时:分:秒\公众, None))self.label_23.setText(_translate(\"大众MainWindow\"大众, \公众appSecret:\"大众, None))self.appSecret_input_form.setHtml(_translate(\公众MainWindow\"大众, \公众<!DOCTYPE HTML PUBLIC \\"大众-//W3C//DTD HTML 4.0//EN\\"大众 \\"大众http://www.w3.org/TR/REC-html40/strict.dtd\\"大众>\n\公众\"大众<html><head><meta name=\\"大众qrichtext\\"大众 content=\\"大众1\\"大众 /><style type=\\"大众text/css\\公众>\n\"大众\"大众p, li { white-space: pre-wrap; }\n\"大众\公众</style></head><body style=\\公众 font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\\公众>\n\"大众\"大众<p style=\\公众 margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\\公众>A1B2C3D4E5F6G7H8</p></body></html>\公众, None))self.label_24.setText(_translate(\"大众MainWindow\"大众, \"大众result-output\"大众, None))self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate(\"大众MainWindow\公众, \公众form模式\"大众, None))#此部分为自己实现组件功能的代码# AES加密class prpcrypt():def __init__(self, key,iv):self.key = keyself.iv=ivself.mode = AES.MODE_CBCdef encrypt(self, text):''' 根据key长度必须是16(AES-128),24(AES-192),32(AES-256)位 不敷位数的,可以利用标准的PKCS添补字符 '''data =text+(AES.block_size - len(text) % AES.block_size) chr(AES.block_size - len(text) % AES.block_size)cryptor = AES.new(self.key, self.mode, self.iv)self.ciphertext = cryptor.encrypt(data)return base64.b64encode(self.ciphertext)class MyApp(QtGui.QMainWindow, Ui_MainWindow):def __init__(self):QtGui.QMainWindow.__init__(self)Ui_MainWindow.__init__(self)self.setupUi(self)self.request_button.clicked.connect(self.CalculateTax)def CalculateTax(self):url = str(self.url_input.toPlainText()).strip(' ')appKey=(str(self.appkey_input.toPlainText())).strip(' ')# 获取content-tpye值,获取当前下拉框comboBox的值和当前的索引content_type_index = self.content_type_select.currentIndex() # 获取当前选择的索引值content_type_value = str(self.content_type_select.currentText()) # 获取当前选择的文本,Qstring类型print content_type_indexprint content_type_value
以上为部分代码,只供应为参考
self.request_button.clicked.connect(self.CalculateTax)
这段代码有什么用?还记得我们把按钮命名为了calc_tax_button
吗?(这是这个按钮工具的名字,不是按钮上显示的提示字符串。)clicked
是一个内置的函数,当有按钮被点击的时候它会被自动调用(很神奇吧)。所有的 QT 组件都有特定的函数,你可以通过 Google 来查看详细。这段代码的末了部分是connect(self.CalculateTax)
。这意味着这个按钮会被链接到一个叫做self.CalculateTax
的函数,这样往后每当用户按下这个按钮的时候,这段代码都会被调用。
下面先容一些获取控件的值和给控件赋默认值的方法:
mainwindow.lineEdit.setText((u\公众zg 额外abc\"大众)) #给输入框赋值
mainwindow.textEdit.setPlainText('') #给texedit赋值
mainwindow.comboBox.setCurrentIndex(2) #给下拉框赋值
mainwindow.checkBox.setChecked(1) #给复选框checkbox赋值,可以填写True或者False 或0 ,1
print unicode(QString(mainwindow.lineEdit.text())) #获取输入框的值
unicode(QString(mainwindow.textEdit.toPlainText()))#获textedit的值
print unicode(QString(mainwindow.comboBox.currentText()))#获取下拉框的值
print mainwindow.comboBox.currentIndex() #获取下拉框的index
if mainwindow.checkBox.isChecked()==True 获取复选框checkbox的值
好了,关于pyqt这块的,先写到这里,我也是刚刚利用这个春节的韶光来琢磨完成的,不过还是须要再深入学习。