PyObjC 和 TKinter 的集成问题
以下简单代码:
from PyObjCTools import AppHelper
import AppKit
import Tkinter
class App(AppKit.NSApplication):
def finishLaunching(self):
self.root=Tkinter.Tk()
_=App.sharedApplication()
AppHelper.runEventLoop()
产生以下异常:Python[23717:d07] -[App _setup:]:无法识别的选择器发送到实例0x105d05340
我做错了什么?
The following simple code:
from PyObjCTools import AppHelper
import AppKit
import Tkinter
class App(AppKit.NSApplication):
def finishLaunching(self):
self.root=Tkinter.Tk()
_=App.sharedApplication()
AppHelper.runEventLoop()
yields the following exception: Python[23717:d07] -[App _setup:]: unrecognized selector sent to instance 0x105d05340
What am I doing wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为 Tkinter 和 Cocoa 工具包不能如此互换地混合使用。
self.root
是类App
上的一个属性,它继承自AppKit.NSApplication
。我的猜测是,Tk()
调用返回一个指针,然后将该指针传递给 Cocoa 框架,但指向它无法理解的 Tk 数据结构。此外,Tkinter 和 PyObjC 都需要自己的事件循环;我不确定你是否可以将两者混合使用(尽管我从未尝试过)。我的建议是使用一个 UI 工具包或另一个,但不能同时使用两者。
I don't think you can mix Tkinter and Cocoa toolkits so interchangeably.
self.root
is an attribute on the classApp
, which inherits fromAppKit.NSApplication
. My guess is that theTk()
call returns a pointer that is then passed to the Cocoa frameworks, but points to a Tk data structure that it can't understand. Also, both Tkinter and PyObjC need their own eventloop; I'm not sure if you can even mix the two (though I've never tried).My recommendation would be to use one UI toolkit or the other, but not both.