我是新来的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 脚本。

你只需要...

  1. 要获得并安装 py2exe

  2. 替换PYTHON_PATH在uic.py 代码下面

  3. 编辑夸脱conf文件在网站-包\PyQt4和设置的二进制文件=路径夹含uic exe一旦它制成。

  4. 把uic.py 和setup.py 在同一个文件夹

  5. 在该命令迅速浏览到的文件夹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)。如果使用的是窗口,可以从注册表获取的路径。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top