使用QTDesigner与PyQT和Python2.6
-
21-09-2019 - |
题
我是新来的Python和我开始自学GUI编程(希望)使用PyQT4.7和Python2.6
我刚刚下载的全PyQT/QT4包(包括QTDesigner)从PyQT的网站,但它似乎QTDesigner,这看起来令人惊讶的使用作为一个新的(因为你可以看到所有的属性/性质/违约等)中的每一个部件,并在视觉上编辑的属性是巨大的,但PyQT似乎不设QTDesigner将直接与用PyQT和PyQTs python代码生成的脚本:
即:打击"看守则",试图运行的设计师->C++脚本称为(uic),而不是的pyuic.py 脚本,等等。
有没有办法得到QTDesigner将密切与PyQT代码生成的飞喜欢它不会用C++?
如果不是,这是否意味着我必须代的整个建GUI在我Python IDE和查阅的所有文件和样板代码,用于每一个小工具?(似乎非常低效率和不雅相比,只是具有QTDesigner+Python integration)。
什么习惯的工具//生产流程的使用设计与PyQT?(如果没有直接的融合是可能的--做python+pyQT的用户只是跳过使用QTDesigner在一起,并手动编写的所有建GUI码在蟒蛇?)
任何额外的技巧/建议PyQT新手,将不胜感激。谢谢!
ps我知道一堆你可能是打算告诉我刚刚把它吸和代码所有的脱UI由方面,但是,如果我使用的设计师在学习如要求上述情况,请提供一种方法来这样做所以我可以学的更容易的,谢谢!
解决方案
我开始写我的第一个PyQt的应用程序(PyQt的仅用于处理GUI),似乎,那好工具链:QtDesigner产生的.ui S和手柄资源和一些IDE,可以设置QtDesigner编辑这些。我使用Eclipse,因为它是高度可定制。 您可以通过在应用程序启动有点做这样的编译受需求的.qrc和的.ui,或设置,或其他任何时间:
os.system("pyrcc4.exe -o ui/images_rc.py ui/images/images.qrc")
uic.compileUiDir(appDir + '/ui', True)
,然后使用生成的类是这样的:
class MyMainWindow(QtGui.QMainWindow):
def __init__(self, owner):
QtGui.QMainWindow.__init__(self)
# 'Ui_MyMainWindow' is the class, that was generated by uic,
# naming convention is: 'Ui_' plus the name of root widget in designer
self.ui = Ui_MyMainWindow()
self.ui.setupUi(self)
也可以直接加载的.ui当容器inits:
QtGui.QMainWindow.__init__(self)
self.ui = None
uic.loadUi('MyMainWindowUI.ui', self.ui)
#now you have the instance of Ui_MyMainWindow in self.ui too, as above
请注意,我已经UI添加后缀到的.ui文件的名称,它是为了避免名称路口,.py文件的原因名,由UIC产生的,是不是类名称以“Ui_”,但只是根小部件的之一。
和另一个注:在生成的文件UIC的地方“进口%.qrc名称%_RC”结束(默认情况下是进口images_rc)字符串,所以你必须意识到这一点使用时pyrcc4
。在整个方法具有足够的灵活性,它需要所有的虚拟UI编码从你的工作;但你仍然可以做MyMainWindow.ui属性,其中Ui_MyMainWindow实例奠定了一些微调;它避免了不必要的继承。就个人而言,我使MyMainWindow _connectSlots和_initIntefrace方法做了一些工作的设计师不能。
不过我必须要注意的是通过自己编写界面代码是很好的办法,原因代码,由UIC产生的,是丑陋的。我比较喜欢,因为这loadUi()加载的.ui到位:)如果你有大量的自定义PyQt的控制,就这样booooring以使它们QtDesigner ..
其他提示
我做什么是我做我自己的伊斯兰法院联盟的可执行,这是一个包装pyuic.py 脚本。
你只需要...
要获得并安装 py2exe
替换PYTHON_PATH在uic.py 代码下面
编辑夸脱conf文件在网站-包\PyQt4和设置的二进制文件=路径夹含uic exe一旦它制成。
把uic.py 和setup.py 在同一个文件夹
在该命令迅速浏览到的文件夹setup.py 和uic.py 然后运行以下命令"蟒蛇setup.py py2exe".
//----uic.py
#uic.py
import subprocess
import sys
args = ""
for arg in sys.argv:
if sys.argv[0] != arg:
args += arg + " "
# Start pyuic.py script
command = 'python %PYTHON_PATH%\\PyQt4\\uic\\pyuic.py '+ args
out = ''
child = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE)
complete = False
while True:
out = child.stderr.read(1)
if out == '' and child.poll() != None:
break
if out != '':
sys.stdout.write(out)
sys.stdout.flush()
//-----setup.py
#setup.py
from distutils.core import setup
import py2exe
setup(windows=[{"script":"uic.py"}], options={"py2exe" : {"includes" : ["sip", "PyQt4.QtCore"]}})
您可以运行从手pyuic
(或者说pyuic4
),在您的控制台。您可以使用设计与Python让你的图形用户界面,就像你用C ++做。
顺便说一句:我写的所有东西的GUI我的应用程序(代码10K)手。我真的不喜欢GUI设计师,并与生成的代码的工作,当你需要调整的东西。
QtDesigner使用uic.exe
以产生上飞C ++代码。 uic.exe
是一个命令行工具,它获取文件名作为输入参数。对于Python集成,你可以写一个Python程序,使用pyuic.py
,与之相匹配的具有uic.exe
的输入(顺序,交换机等)输入,将其转换为一个可执行文件(使用py2exe)和可执行文件重命名为uic.exe
。然后用uic.exe在Qt的bin目录替换它(uic.exe不要在PyQt的存在,因为我知道)。你应该小心uic.exe
的输入参数和你手工编写的宏(他们应该搭配在一起)。
我觉得你的程序将需要知道Python的路径(为了使用pyuic)。如果使用的是窗口,可以从注册表获取的路径。