非常基本的OO:改变方法的属性

时间:2013-06-14 16:37:58

标签: python pyqt

我确信这已被问了一百万次,但是当你不知道正确的术语时,很难找到一些东西:(

我正在尝试(再次......我永远不会理解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的痛苦之外的错误......)

3 个答案:

答案 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)有相当多的经验。看起来您需要确定字段exitIconexitAct中存储的对象类型。从那里,您需要找出这些对象具有的属性,并找到可以更改的对象以获得所需的行为。

更多想法:

在执行self.exitIcon = QtGui.QIcon('exit.png')self.exitIcon.addFile("exitdoor.png") self.exitIcon之间的某处更改为引用QToolBar。我建议您开始使用print语句填充代码,以便跟踪代码的执行情况并了解此变量的更改方式。

答案 2 :(得分:0)

在与一些比我更聪明的人交谈之后,简短的回答是,我试图做的事情似乎是不可能的。一旦定义了action,就无法更改它的任何属性。

目前,我对python的了解并不足以完全理解为什么会这样(或者我如何从文档中实现这一点),但似乎在定义一个动作时,它实际上是一个黑盒子存储在内存中,其他对象只能使用而不能修改黑盒。

还欢迎进一步的评论!