【问题标题】:Classes and tkinter. What does this expression mean?类和 tkinter。这个表达是什么意思?
【发布时间】:2022-01-05 08:31:27
【问题描述】:

我正在学习使用 tkinter 制作应用程序,同时我也在学习语言本身。我在一本书中找到了如何创建第二个窗口(设置窗口)的描述。但我不明白为什么self.parent = view.parent。

如果PreferencesWindow(): 类中没有指定parent 值,那么它从何而来?分隔两个变量(self.parent = view.parent)的意义何在?什么是视图?

我的主模块(类View):

import preferenceswindow

class View():
    def __init__(self, parent, controller):
        self.controller = controller
        self.parent = parent
        self.create_gui()
    
    def create_edit_menu(self):
        self.edit_menu.add_command(label="Preferences", command=self.on_preference_menu_clicked)

    def on_preference_menu_clicked(self):
        preferenceswindow.PreferencesWindow(self)    

    def create_gui(controller_instance):
        root = Tk()
        root.title("APP")

View(root, controller_instance)
root.mainloop()

偏好类看起来像这样:

class PreferencesWindow():
    def __init__(self, view):
        self.parent = view.parent
        self.view = view
        self.create_prefereces_window()
    
    def create_prefereces_window(self):
        self.pref_window = Toplevel(self.parent)
        self.pref_window.title("preferences")
        self.pref_window.transient(self.parent)

在我的书中没有解释这一刻。

【问题讨论】:

  • Stackoverflow 无意取代现有的教程或文档。您只需要更好地学习语言(您的问题实际上与 tkinter 本身无关)。

标签: python class tkinter


【解决方案1】:

这些是与 Python(该语言)如何工作有关的基本问题。

您在询问参数传递和类属性。

如果类PreferencesWindow()中没有指定父值从哪里来

def on_preference_menu_clicked(self):
        preferenceswindow.PreferencesWindow(self) 

这表示“创建一个新的 PreferencesWindow,并给它一个我自己的引用,即调用 View 类实例。”

这随后被:def __init__(self, view): 接收,这意味着“初始化新的 PreferencesWindow,并通过名称 'view' 引用来自调用 View 类的任何内容”。这允许 PreferencesWindow 访问来自调用类实例的变量,例如属性“父”。

self.parent = view.parent - 此操作很常见,是为了方便,避免手动传递“视图”。它从view.parent 中捕获'parent' 的值,该值在class View ... self.parent = parent 中设置

【讨论】:

  • 非常感谢您的回答。我是编程新手。请告诉我,我可以在哪里了解更多关于在类中传递属性的信息?这是我第一次遇到这种表达方式(self.parent = view.parent)。
  • 尝试阅读这里的类、面向对象编程和 Tkinter 部分 - python-textbok.readthedocs.io/en/1.0/Classes.html
猜你喜欢
  • 2011-03-04
  • 2020-10-23
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
  • 2013-08-02
相关资源
最近更新 更多