<p>你想达到的目标可以这样做:</p>
<pre><code>class Ptsgui(QtGui.QMainWindow):
def __init__(self):
super(Ptsgui, self).__init__()
self.p1, self.p2, self.data = 0, 0, np.zeros(10)
self.initUI()
def initUI():
"""
Some sliders setup for change the p1 & p2
"""
self.setGeometry(50, 50, 1050, 650)
mainlayout = QtGui.QVBoxLayout()
self.widget = QtGui.QWidget()
self.widget.setLayout(mainlayout)
self.listener = OscListener(gui=self, data=self.data)
self.show()
class OscListener(object):
def __init__(self, gui, data):
self.gui = gui
self.listenerData = data
self.receive_address = '127.0.0.1', 7000
def do_stuff_listener(self, addr, tags, stuff, source):
print self.gui.p1
print self.gui.p2
self.p3 = stuff[0]
trigger_sound_and_graphic(self.gui.p1, self.gui.p2, self.gui.p3)
def spawn(self):
self.receiveServer = OSC.OSCServer(self.receive_address)
self.receiveServer.addDefaultHandlers()
self.receiveServer.addMsgHandler("/trigger", self.do_stuff_listener()
self.emorating_oscServer = threading.Thread(target=self.receiveServer.serve_forever)
self.emorating_oscServer.start()
</code></pre>
<p>请注意,不需要从代码示例中嵌套类。在</p>
<p>而且,在我看来,你想要达到的目标是不正确的。代码是非常耦合的。考虑分离<code>Ptsgui</code>和{<cd2>}。查看<a href="http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Observer.html" rel="nofollow">Observer pattern</a>获取一些灵感。在</p>