Python Tkinter «AttributeError: объект типа «Класс» не имеет атрибута «self»»Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Python Tkinter «AttributeError: объект типа «Класс» не имеет атрибута «self»»

Сообщение Anonymous »

Как получить доступ к пользовательским данным, если графический интерфейс Tkinter настроен как класс?
Макроструктура в app.py (импортирована в другие файлы как wc):
class Class:

def __init__(self, root):

# Root window
self.root = root
...

self.root.mainloop()

if __name__ == "__main__":
root = tk.Tk()
Class(root)
root.mainloop()


В корневом окне находится ttk.Notebook(self.root), содержащий две вкладки (каждая из них — ttk.Frame(self)).
Каждая вкладка, в свою очередь, имеет две вложенные вкладки. фреймы, один содержит форму, другой — для виджетов управления.
Все эти фреймы и их виджеты создаются с тем же отступом, что и корневое окно.
Один виджет предназначен для зафиксировать выбор страны пользователем:
self.country_input = tk.StringVar()
self.country_box = ttk.Combobox(self.tab2_form, values=countries, textvariable=self.country_input, width=self.classboxw)
self.country_box.grid(row=2, column=1, sticky=("N", "E", "S", "W"), padx=10, pady=5)
self.country_box.bind("", ops.set_country)

Я хочу, чтобы метод, связанный с полем со списком, сохранял страну_вход для использования в другом месте программы. Но я не могу понять, как написать это так, чтобы интерпретатор Python понимал.
Методы находятся в отдельном пользовательском модуле Operations.py (импортируются как ops).Если я попробую это:
country = ""
def set_country(self):
country = wc.self.country_input.get()

Я получаю сообщение об ошибке:
"AttributeError: объект типа "Класс" не имеет атрибута "self""
Это я не понимаю Не понимаю, я думал, что все виджеты в классе app.py являются атрибутами класса?
Если я попробую это (исключив «self» из ссылки):
country = ""
def set_country(self):
country = wc.country_input.get()

Я получаю сообщение об ошибке:
"AttributeError: объект типа "Класс" не имеет атрибута "country_input""
Как еще это сделать относятся к переменной, к которой я хочу получить доступ?

Выше приведен мой исходный вопрос без изменений.
Ответчик «acw1668» запросил воспроизводимый пример. Это следует здесь.
GUI определен в classExample.py:
# Imports from standard Python modules
import tkinter as tk
from tkinter import ttk

# Imports from custom app modules
import opera as opa

# Graphical User Interface
class WC:

def __init__(self, root, ops):

# Root window
self.root = root

# App structure: Notebook tab manager with two tabs
self.nb = ttk.Notebook(self.root)
self.tab1 = ttk.Frame(self.nb)
self.nb.add(self.tab1, text="")
self.tab2 = ttk.Frame(self.nb)
self.nb.add(self.tab2, text="")
self.nb.grid()

# Tab two, structure: two Frames side by side, form and control
self.tab2_form = ttk.Frame(self.tab2)
self.tab2_ctrl = ttk.Frame(self.tab2)
self.tab2_form.grid(row=0, column=0, padx=30, pady=10)
self.tab2_ctrl.grid(row=0, column=1, padx=30, pady=10)
...

# Tab two, "form" Frame: widgets
...
self.country_input = tk.StringVar()
self.country_box = ttk.Combobox(self.tab2_form, values=["a", "b", "c",], textvariable=self.country_input)
self.country_box.grid(row=2, column=1, sticky=("N", "E", "S", "W"), padx=10, pady=5)
self.country_box.bind("", ops.set_country)
...
self.root.mainloop()

if __name__ == "__main__":
root = tk.Tk()
WC(root, opa)
root.mainloop()


Метод определен в пользовательском модуле Opera.py:
from classExample import WC as wc

# Methods that operate with user data
country = ""
def set_country(self):
country = wc.country_input.get()



Подробнее здесь: https://stackoverflow.com/questions/785 ... ibute-self
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»