跟我一步一步做一个QT Python程序 (7.2更新)

软件和网站开发以及相关技术探讨
回复
头像
jqx1990
帖子: 181
注册时间: 2007-02-22 17:07
联系:

跟我一步一步做一个QT Python程序 (7.2更新)

#1

帖子 jqx1990 » 2013-06-28 11:17

今天刚刚决定要做一个基于QT的Python程序。我也是Python入门,我将会在此贴实时更新我学习和做程序的进度,把代码贴在这里,大家有兴趣的可以一起讨论,一起来做这个程序!

程序名称:Quick Command
程序描述:有时候我们在Linux下会遇到很多的命令,我们可能只能记住常用的,不常用的每次都要Google,然后再用,很没有效率。尤其是对于那种介于常用与不常用之间的命令,对于像我一样记性不好的人来说,每次必忘。如果有这么一个程序可以把这种“鸡肋”命令集合起来,需要的时候点一下鼠标,岂不是很好。
后话:我知道很多人说,Linux下的终端可以设置热键,这样把“鸡肋”命令设置为热键也可以,何必这么复杂?但是,目前我还没看到类似的程序,做一个又何妨。

这个是我发在豆瓣上面的,但是没什么人气,所以转发过来,看能不能增加一点热度。


以下内容为6.28更新++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

首先,我们准备一下需要的东西:
  • 第一个当然是python,个人推荐python3,直接sudo apt-get install python3即可,需要运行程序的时候直接python3 {程序名}.py
  • 然后是IDE,当然,这个东西随你个人爱好,我喜欢PyCharm,虽然是收费的,的确好用(虽然我还是喜欢用终端直接测试)
  • 最后就是qt4-designer,这个东西直接sudo apt-get install qt4-designer。注意,装了深度系统的同志们,qt4-designer和深度的依赖关系有冲突,所以最简单的办法就是换到一个稍微普通一点的系统,比如我的Linux Mint 15。
基本上我就是用PyCharm写Python代码,用qt4-designer写GUI,用终端测试程序。好,今天就到这里,先睡觉了。

以下内容为6.30更新++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

先说一下python和QT结合的基本的思路。QT的界面,普通一点的,直接在QT Designer下就可以做出来。很简单,直接拖拽,然后文件保存为后缀名为ui的文件。但是问题在这里,要怎么把QT的ui文件转换为python程序呢?

一个命令就可以搞定:pyuic4 -x demo.ui -o demo.py

解释一下这个命令。首先,要使用这个命令,必须安装pyqt4-dev-tools这个包,这个包很小,直接apt-get,100KB左右。现在解释命令:-x 后面跟的是需要转换的文件。比如,在我们这个情况下, 需要转换的文件叫做demo.ui;而-o后面跟的文件名是你想要输出成的python程序的名字。这里,方便起见,我们就把它叫做demo.py。

当然,QT Designer不是必须的。查看demo.py的代码就可以看到,这个QT做的界面只是一些简单的python代码而已,你也可以自己写。

这样,QT和python就结合起来了。

以下内容为7.2更新++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

本来是准备天天更新的,但是7.1实在是不吉利,所以就避开吧。

今天的更新主要是讲述QT的事件处理的几个要点。简单地说,就是你按一下QT的按钮,python要如何反应的问题。关于这个问题,这篇文章有详解:(http://cppblog.com/mirguest/archive/201 ... 64984.html)《PyQt4 中的事件和信号》by mirguest

但是他讲得太复杂了,和一本厚厚的Python QT编程指南有什么区别? 所以我把它简化一下,给大家一个明晰的印象,以后如果需要去了解更多的细节,可以参阅他的文章。

上一次我说了,我们可以用pyuic4来把QT代码转换为py代码。转换之后,我们需要自己设计每一个QT元素(按钮、滚动条等)在用户操作(单击、悬停等)下的表现(被按下,显示一行字,运行一个命令等)。最简单的一个代码就是self.pushButton.clicked.connect(self.doListing)。这个self大家学python都明白。pushButton就是那个按钮的默认名字。clicked指的是在被点击的状态。connect指的是这个状态所应当指向的操作,而后面的括号里的doListing就是这个操作。这个doListing就是一个方法,你随便定义什么都可以。所以这下,QT和python结合的程序一下子就焕发生机了。以下是这段代码所在的完整代码(QT部分是用QT Designer生成的,当然可以手写,太麻烦了,以后再来手写)。

代码: 全选

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file '2.ui'
#
# Created: Mon Jul  1 15:24:23 2013
#      by: PyQt4 UI code generator 4.10
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui
import os

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_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName(_fromUtf8("Dialog"))
        Dialog.resize(400, 300)
        self.pushButton = QtGui.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(60, 130, 300, 30))
        self.pushButton.setObjectName(_fromUtf8("List what's in the directory"))
	self.pushButton.clicked.connect(self.doListing)

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def doListing(self):
	os.system('ls')

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(_translate("Dialog", "Dialog", None))
        self.pushButton.setText(_translate("Dialog", "List what's in the directory", None))


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    Dialog = QtGui.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())
说到这里,大家可能看到第一行的代码了,这里说一个小技巧。不管是我们这个小小的程序还是goAgent这样的神器,python程序在Ubuntu下一直不能双击执行,现提供一个方法:
第一步,chmod +x filename.py
第二步,加入 #!/usr/bin/env python 到py脚本的第一行,这无非就是告诉系统,我要用在这个目录下的python运行此脚本。

好,现在就可以直接双击运行了。
上次由 jqx1990 在 2013-07-02 9:07,总共编辑 4 次。
Lee
Computer Science at Columbia University
KF7NCH


我做的软件https://code.google.com/p/geeky-shutdown/
我开发的NLP工具包https://code.google.com/p/lee-lemmatizer/
跟我一步一步做一个QT Python程序http://forum.ubuntu.org.cn/viewtopic.php?f=162&t=444808
我的简历http://www.linkedin.com/pub/qingxiang-jia/32/4a6/54
头像
月下叹逍遥
论坛版主
帖子: 33994
注册时间: 2010-10-07 14:23
系统: Archdows10
来自: 某系某星某洲某国某省某市
联系:

Re: 跟我一步一步做一个QT Python程序

#2

帖子 月下叹逍遥 » 2013-06-28 11:21

:em11 :em11 :em11 支持技术文
浮生七十今三十,从此凄惶未可知
头像
zhw2101024
帖子: 1849
注册时间: 2009-03-28 16:10
系统: Arch debian win7
联系:

Re: 跟我一步一步做一个QT Python程序

#3

帖子 zhw2101024 » 2013-06-28 12:59

我想说的是,我这里访问不了google code。人气不好可能跟这个有关?
头像
zhw2101024
帖子: 1849
注册时间: 2009-03-28 16:10
系统: Arch debian win7
联系:

Re: 跟我一步一步做一个QT Python程序

#4

帖子 zhw2101024 » 2013-06-28 13:00

https不能访问,http就可以。
既然用git,为什么不放在github上呢?
头像
jqx1990
帖子: 181
注册时间: 2007-02-22 17:07
联系:

Re: 跟我一步一步做一个QT Python程序

#5

帖子 jqx1990 » 2013-06-28 21:01

zhw2101024 写了:我想说的是,我这里访问不了google code。人气不好可能跟这个有关?
呃,那个签名的软件是已经做好了的,这次做的还没有放上去,我还没有开始写,写了以后代码就直接贴在帖子里面。Git太专业,不会。
Lee
Computer Science at Columbia University
KF7NCH


我做的软件https://code.google.com/p/geeky-shutdown/
我开发的NLP工具包https://code.google.com/p/lee-lemmatizer/
跟我一步一步做一个QT Python程序http://forum.ubuntu.org.cn/viewtopic.php?f=162&t=444808
我的简历http://www.linkedin.com/pub/qingxiang-jia/32/4a6/54
allsunday
帖子: 1
注册时间: 2013-07-07 11:05
系统: fedora 17

Re: 跟我一步一步做一个QT Python程序 (7.2更新)

#6

帖子 allsunday » 2013-07-07 13:32

jqx1990, 你好 我现在想实现一个功能是 通过QT creator设计图形界面(带有文本输入功能) 然后 改变一个*.py的文件里 指定位置的内容
通过seek()定位然后尝试了.write()和QTextStream
发现两个问题是 如果是seek(0)写入 那么整个文件就都重新改写了 以前的都没了
如果seek(255)到要改的参数的地方 写入的话 那么*.py这个文件又会出现乱码
由于本人不是学计算机的……知识储备不是很足啊 找了一些QT的书 在文件的写入与读取方面的内容又是很少
想像您求助 :em01
ps.主要目的是为一个批处理天文数据(python和idl编写的)的程序写一个图形化界面 这个程序只需要改一些文件地址和参数

程序的一部分:
#!/usr/bin/python
#file name: makelc.py

import sys
import os
import re
import shutil
#**************************************************************************************************
#Input parameters for setting directory.
P_num='P92042'
path_d='/home/binary/xrdata/GX17+2/' #Data directory
path_r='/home/binary/xrlt/GX17+2/' #Result directory

比如我现在想更改“P_num” “path_d” “path_r” 这三个参数的内容该如何实现?可否给一点思路? :em01
头像
jqx1990
帖子: 181
注册时间: 2007-02-22 17:07
联系:

Re: 跟我一步一步做一个QT Python程序 (7.2更新)

#7

帖子 jqx1990 » 2013-07-09 14:08

allsunday 写了:jqx1990, 你好 我现在想实现一个功能是 通过QT creator设计图形界面(带有文本输入功能) 然后 改变一个*.py的文件里 指定位置的内容
通过seek()定位然后尝试了.write()和QTextStream
发现两个问题是 如果是seek(0)写入 那么整个文件就都重新改写了 以前的都没了
如果seek(255)到要改的参数的地方 写入的话 那么*.py这个文件又会出现乱码
由于本人不是学计算机的……知识储备不是很足啊 找了一些QT的书 在文件的写入与读取方面的内容又是很少
想像您求助 :em01
ps.主要目的是为一个批处理天文数据(python和idl编写的)的程序写一个图形化界面 这个程序只需要改一些文件地址和参数

程序的一部分:
#!/usr/bin/python
#file name: makelc.py

import sys
import os
import re
import shutil
#**************************************************************************************************
#Input parameters for setting directory.
P_num='P92042'
path_d='/home/binary/xrdata/GX17+2/' #Data directory
path_r='/home/binary/xrlt/GX17+2/' #Result directory

比如我现在想更改“P_num” “path_d” “path_r” 这三个参数的内容该如何实现?可否给一点思路? :em01
allsunday 你好,我发的这些代码就是目前我能力所及的部分。我也是刚开始学python和qt,把这个帖子当成大家探讨学习的一个地方。你说的seek()我还没有接触,不是很清楚。不过,我最近也在处理比较大的数据,我采用的办法是根本不写gui,直接用python写基于命令行的程序,我感觉这样,要方便一些。关于你说的几个问题,我尽量在之后的学习中尝试。
Lee
Computer Science at Columbia University
KF7NCH


我做的软件https://code.google.com/p/geeky-shutdown/
我开发的NLP工具包https://code.google.com/p/lee-lemmatizer/
跟我一步一步做一个QT Python程序http://forum.ubuntu.org.cn/viewtopic.php?f=162&t=444808
我的简历http://www.linkedin.com/pub/qingxiang-jia/32/4a6/54
头像
huangbster
帖子: 187
注册时间: 2012-10-29 11:35
系统: UBUNTU

Re: 跟我一步一步做一个QT Python程序 (7.2更新)

#8

帖子 huangbster » 2013-07-10 8:47

本來python的運行效率就不高,再加上QT的運行效率也不高,真的不感冒。
头像
zhw2101024
帖子: 1849
注册时间: 2009-03-28 16:10
系统: Arch debian win7
联系:

Re: 跟我一步一步做一个QT Python程序 (7.2更新)

#9

帖子 zhw2101024 » 2013-07-10 9:06

allsunday 写了:jqx1990, 你好 我现在想实现一个功能是 通过QT creator设计图形界面(带有文本输入功能) 然后 改变一个*.py的文件里 指定位置的内容
通过seek()定位然后尝试了.write()和QTextStream
发现两个问题是 如果是seek(0)写入 那么整个文件就都重新改写了 以前的都没了
如果seek(255)到要改的参数的地方 写入的话 那么*.py这个文件又会出现乱码
由于本人不是学计算机的……知识储备不是很足啊 找了一些QT的书 在文件的写入与读取方面的内容又是很少
想像您求助 :em01
ps.主要目的是为一个批处理天文数据(python和idl编写的)的程序写一个图形化界面 这个程序只需要改一些文件地址和参数

程序的一部分:
#!/usr/bin/python
#file name: makelc.py

import sys
import os
import re
import shutil
#**************************************************************************************************
#Input parameters for setting directory.
P_num='P92042'
path_d='/home/binary/xrdata/GX17+2/' #Data directory
path_r='/home/binary/xrlt/GX17+2/' #Result directory

比如我现在想更改“P_num” “path_d” “path_r” 这三个参数的内容该如何实现?可否给一点思路? :em01
如果运行环境是Linux的话,感觉直接调用sed或者awk工具会好一些,毕竟是专业处理文本的,很多常用操作通过参数就可以实现,不用自己去写一些太过细节的东西。这些还是很值得学习的,不会绑定在任何一种语言上。并且如果处理大量文本的话,为了不会卡住界面必定要考虑多线程,那就更复杂了,不如直接调用一个系统命令,互不影响。
上次由 zhw2101024 在 2013-07-10 9:12,总共编辑 1 次。
头像
xujc
帖子: 680
注册时间: 2009-12-06 15:04

Re: 跟我一步一步做一个QT Python程序 (7.2更新)

#10

帖子 xujc » 2013-07-10 9:09

huangbster 写了:本來python的運行效率就不高,再加上QT的運行效率也不高,真的不感冒。
这东西需要考虑“运行效率”么?又不是做计算。
头像
china_baby
帖子: 71
注册时间: 2007-06-20 13:17
来自: 上海

Re: 跟我一步一步做一个QT Python程序 (7.2更新)

#11

帖子 china_baby » 2013-07-23 9:12

zhw2101024 写了:
allsunday 写了:jqx1990, 你好 我现在想实现一个功能是 通过QT creator设计图形界面(带有文本输入功能) 然后 改变一个*.py的文件里 指定位置的内容
通过seek()定位然后尝试了.write()和QTextStream
发现两个问题是 如果是seek(0)写入 那么整个文件就都重新改写了 以前的都没了
如果seek(255)到要改的参数的地方 写入的话 那么*.py这个文件又会出现乱码
由于本人不是学计算机的……知识储备不是很足啊 找了一些QT的书 在文件的写入与读取方面的内容又是很少
想像您求助 :em01
ps.主要目的是为一个批处理天文数据(python和idl编写的)的程序写一个图形化界面 这个程序只需要改一些文件地址和参数

程序的一部分:
#!/usr/bin/python
#file name: makelc.py

import sys
import os
import re
import shutil
#**************************************************************************************************
#Input parameters for setting directory.
P_num='P92042'
path_d='/home/binary/xrdata/GX17+2/' #Data directory
path_r='/home/binary/xrlt/GX17+2/' #Result directory

比如我现在想更改“P_num” “path_d” “path_r” 这三个参数的内容该如何实现?可否给一点思路? :em01
如果运行环境是Linux的话,感觉直接调用sed或者awk工具会好一些,毕竟是专业处理文本的,很多常用操作通过参数就可以实现,不用自己去写一些太过细节的东西。这些还是很值得学习的,不会绑定在任何一种语言上。并且如果处理大量文本的话,为了不会卡住界面必定要考虑多线程,那就更复杂了,不如直接调用一个系统命令,互不影响。
可能是编码的问题,Asic or bin.
是否我,真的一无所有??
foxclive
帖子: 30
注册时间: 2011-03-16 18:02

Re: 跟我一步一步做一个QT Python程序 (7.2更新)

#12

帖子 foxclive » 2013-10-11 17:27

哪个,我是新手。不知道pycharm哪个run[F5]的配置里的script每次都要配置么,能不能有不用老是要自己选上script文件的方法呢?
天羽美羽
帖子: 183
注册时间: 2013-05-22 22:29
系统: Ubuntu14.04

Re: 跟我一步一步做一个QT Python程序 (7.2更新)

#13

帖子 天羽美羽 » 2013-10-14 18:32

多谢分享,学习了!
回复