Python 这些GUI元素在MVC术语中代表什么?

Python 这些GUI元素在MVC术语中代表什么?,python,model-view-controller,tkinter,Python,Model View Controller,Tkinter,我在这个列表框的tkinter中有一个列表框。我们可以选择一个图像,所有图像都在模型中的一个数组中,但我不知道Listbox是否对应于MVC“视图”或“控制器”,如果它是控制器,如何添加我们刚刚根据MVC导入的图像。列表框或tkinter中的任何其他小部件既是视图的一部分,也是控制器的一部分,从某种意义上说,它是视图(显然),但在代码中注册回调时,它也充当控制器,小部件捕获相关的用户交互(事件)并将它们定向到注册代码(在tkinter event mainloop的帮助下) 如果您愿意,您可以做

我在这个
列表框的tkinter中有一个
列表框
。我们可以选择一个图像,所有图像都在模型中的一个数组中,但我不知道
Listbox
是否对应于MVC“视图”或“控制器”,如果它是控制器,如何添加我们刚刚根据MVC导入的图像。

列表框或
tkinter
中的任何其他小部件既是视图的一部分,也是控制器的一部分,从某种意义上说,它是视图(显然),但在代码中注册回调时,它也充当控制器,小部件捕获相关的用户交互(事件)并将它们定向到注册代码(在tkinter event mainloop的帮助下)

如果您愿意,您可以做的是将业务代码放在一个单独的模块(您的模型)中,让您的
tkinter
registered回调调用模型中的函数,如果模型因此而更改,则使用observer模式通过通知更新小部件(视图)(参见Python示例)。实际上,您在模型中保留了一个观察者列表,当模型更改时,您将调用它们的
update()
notify()
方法

这将需要您做更多的工作,这在许多情况下是一个缺点,但在模型更改影响某些小部件的任何时候都可以自动更新您的UI


请注意,除非您有充分的理由,否则我不建议所有这些都适用于简单的情况(比如使用一些控件)。想要使用MVC看起来像是想要真正分离关注点,但首先评估工作…

这对你有什么影响?@martineau如果是视图,只需要更新控件宽度,如果是控件,我不应该像视图一样更新,我想尊重MVCI不要认为
tkinter
使用
MVC
-只有小部件可以做所有事情。@martineau我知道,但我想让我的代码使用MVC,我不知道如何更新控件宽度MVCI认为
tkinter
提供的大部分小部件(如果不是全部的话)都属于MVC“视图”类别您的图像阵列听起来像一个模型(或模型的一部分)。控制器本身可能是“tkinter”。你把苹果和橙子混合在一起,所以从一个到另一个没有完美的映射。也许你应该试着使用它,它非常像Windows。