我是Python的新手,并开始使用PyQT4.7和Python 2.6自学GUI编程(希望如此)
我刚刚从PyQT网站上下载了整个PyQT / QT4软件包(包括QTDesigner),但它似乎是QTDesigner,它看起来很棒,可以用作新手(因为你可以看到所有属性/属性/默认值等)小部件和可视化编辑属性是很好的,但PyQT似乎没有设置QTDesigner直接与PyQT和PyQTs python代码生成脚本集成:
:点击“查看代码”,尝试运行名为(uic)的Designer-> C ++脚本,而不是pyuic.py脚本等。
有没有办法让QTDesigner与PyQT紧密集成以便像在C ++中一样动态生成代码?
如果没有,这是否意味着我必须在我的Python IDE中编写整个QT GUI并查找每个小部件的所有文档和样板代码? (与仅使用QTDesigner + Python集成相比,效率非常低,效率低)。
使用Designer和PyQT的习惯工具链//生产流程是什么? (如果不能直接集成 - python + pyQT用户是否只是一起跳过使用QTDesigner并手动在python中编写所有QT GUI代码?)
对于PyQT新手的任何其他提示/建议将不胜感激。谢谢!
ps我知道你们可能会告诉我只是把它搞砸并手工编写所有QT用户界面,但如果我按照上面的要求学习使用Designer,请提供一种方法来做到这一点可以更轻松地学习它,谢谢!
答案 0 :(得分:20)
我开始写我的第一个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)
或者你可以在容器inits:
时直接加载.ui 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生成的代码是UGLY。我比较喜欢,因为这loadUi()代替加载的.ui :)如果你有大量的自定义PyQt的控制,它是如此booooring以使它们QtDesigner ..
答案 1 :(得分:2)
我做的是我创建了自己的uic可执行文件,它是pyuic.py脚本的包装器。
你需要......
获取并安装py2exe
在下面的uic.py代码中替换PYTHON_PATH
编辑site-packages \ PyQt4中的qt.conf文件,并设置Binaries = Path到包含uic exe的文件夹。
将uic.py和setup.py放在同一个文件夹中
在命令提示符中,导航到setup.py和uic.py所在的文件夹,然后运行以下命令“python 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"]}})
答案 2 :(得分:1)
您可以在控制台中手动运行pyuic
(或更确切地说pyuic4
)。您可以使用Python设计器创建GUI,就像使用C ++一样。
顺便说一句:我已经为我的应用程序(10k代码)编写了所有GUI内容。当你需要调整一些东西时,我真的不喜欢GUI设计师并使用生成的代码。
答案 3 :(得分:0)
QtDesigner使用uic.exe
生成动态C ++代码。 uic.exe
是一个命令行工具,它将文件名作为输入参数。为了与python集成,你可以编写一个使用pyuic.py
的python程序,将输入与uic.exe
的输入(顺序,开关等)匹配,将其转换为可执行文件(使用py2exe)并重命名uic.exe
的可执行文件。然后用Qt的bin目录中的uic.exe替换它(据我所知,uic.exe在PyQt中不存在)。您应该注意uic.exe
的输入参数和您手写的宏(它们应该匹配在一起)。
我认为你的程序需要知道python的路径(为了使用pyuic)。如果您使用的是Windows,则可以从注册表中获取路径。