我确信这已被问了一百万次,但是当你不知道正确的术语时,很难找到一些东西:(
我正在尝试(再次......我永远不会理解OO,因为8年前我被教导得非常糟糕,并尽可能地避免它,每个人的恐惧我知道的其他程序员 - 我的思想似乎并没有得到它同时自学OO和PyQt。
我甚至不知道这在逻辑上是否可行,但我有一个PyQt 动作,由2个不同的事物引用;该动作的一个参数是Icon。当其中一个事物调用的动作时,我想更改图标;代码段:
self.menu()
self.toolbar()
self.actions()
def menu(self):
self.fileMenu = QtGui.QMenu("&File", self)
self.fileMenu.addAction(self.exitAct)
def toolbar(self):
self.toolbar = self.addToolBar("Exit")
self.toolbar.addAction(self.exitAct)
def actions(self):
self.exitIcon = QtGui.QIcon('exit.png')
self.exitAct = QtGui.QAction(self.exitIcon, "&Exit", self, triggered=self.close)
在工具栏中,我想要一个不同的图标(exitdoor.png
)。 QtIcon
的文档有addFile
方法,所以我尝试了:
self.toolbar.addAction(self.exitAct)
self.exitIcon.addFile("exitdoor.png")
但这不起作用,错误(“'QToolBar'对象没有属性'addFile'”)和
self.exitAct.addFile("exitdoor.png")
错误'QAction'对象没有属性'addFile'(我明白为什么这不起作用,错误意味着什么)。
我的愚蠢错误是什么?! (除了让自己忍受继续尝试学习OO的痛苦之外的错误......)
答案 0 :(得分:1)
'在QToolBar'对象没有属性' addFile'
嗯,既然你在self.exitIcon上调用了addFile,看起来你在self.exitIcon变量中有一个错误的对象。您似乎希望它是QtGui.QIcon类型,而是它的QToolBar类型。
你应该看看你在哪里为self.exitIcon做作业。
在这种情况下,尝试通过Python学习面向对象的编程并不是最简单的方法。 Python是一种很好的面向对象语言,但它并不像其他语言那样立即捕获您的错误。当你得到如上所述的错误时,错误不是在那行代码中,而是在一段时间前运行的代码行中。其他语言甚至可以在您运行程序之前发现错误,并直接指向您需要修复的行。在进入Python的狂野之前,你可能有必要练习一些基本的Java来接受严格教师的OOP培训。
答案 1 :(得分:0)
我不熟悉PyQt,只是Python的初学者,但我对其他OO语言(主要是C ++和Java)有相当多的经验。看起来您需要确定字段exitIcon
和exitAct
中存储的对象类型。从那里,您需要找出这些对象具有的属性,并找到可以更改的对象以获得所需的行为。
更多想法:
在执行self.exitIcon = QtGui.QIcon('exit.png')
和self.exitIcon.addFile("exitdoor.png")
self.exitIcon
之间的某处更改为引用QToolBar
。我建议您开始使用print
语句填充代码,以便跟踪代码的执行情况并了解此变量的更改方式。
答案 2 :(得分:0)
在与一些比我更聪明的人交谈之后,简短的回答是,我试图做的事情似乎是不可能的。一旦定义了action
,就无法更改它的任何属性。
目前,我对python的了解并不足以完全理解为什么会这样(或者我如何从文档中实现这一点),但似乎在定义一个动作时,它实际上是一个黑盒子存储在内存中,其他对象只能使用而不能修改黑盒。
还欢迎进一步的评论!