Форум сайта python.su
Приветствую!
Подскажите, как изменить метку с другого класса? Как к ней обратиться для изменения ее свойств?
Код примерно такой (обрезан от всего лишнего):
from tkinter import Tk, Frame, BOTH from tkinter.ttk import Button, Label, Style from tkinter import messagebox from tkinter.filedialog import askopenfilename class Rem(): def open_file(self): self.a = [] self.filename = askopenfilename(initialdir = "D:/Documents",title = "Выберите файл для работы",filetypes = (("Import files","Import.txt"),("All files","*.*"))) with open(self.filename, "r", encoding='utf-8') as f: for line in f: if not line.isspace(): self.a.append(line.replace('\n', '')) f.close() Gui.lbl1.config(text=str(self.filename).replace('/', '\\')) return a class Gui(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.parent.title("Coiner") self.pack(fill=BOTH, expand=1) self.centerWindow() self.initUI() def initUI(self): btn1 = Button(self.parent, text='', command=Rem().open_file) btn1.place(x=5, y=5, height=32, width=32) self.lbl1 = Label(self.parent, text="Файл не выбран", font=("Arial", 10)) self.lbl1.place(relx=.5, rely=1, anchor="s", height=20, width=800) def centerWindow(self): w = 800 h = 600 sw = self.parent.winfo_screenwidth() sh = self.parent.winfo_screenheight() x = (sw - w) / 2 y = (sh - h) / 2 self.parent.geometry('%dx%d+%d+%d' % (w, h, x, y)) self.parent.resizable(False, False) def main(): root = Tk() Gui(root) root.mainloop() def main(): Gui.main() if __name__ == '__main__': main()
Gui.lbl1.config(text=str(self.filename).replace('/', '\\'))
a = self.open_file()
Офлайн
не очень понимаю что у вас как и зачем но вот код для примера
from tkinter import Tk, Frame, BOTH from tkinter.ttk import Button, Label, Style from tkinter import messagebox from tkinter.filedialog import askopenfilename class Rem: # общая для всех экземпляров класса a = [] def open_file(self): self.filename = askopenfilename( initialdir="D:/Documents", title="Выберите файл для работы", filetypes=(("Import files","Import.txt"), ("All files","*.*"))) with open(self.filename, "r", encoding='utf-8') as f: for line in f: if not line.isspace(): self.a.append(line.replace('\n', '')) f.close() #- example меняем текст global win win.lbl1['text'] = "xz" #- return self.a def set_a(self, val): self.a = val def get_a(self): return self.a class Gui(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.parent.title("Coiner") self.pack(fill=BOTH, expand=1) self.rem = Rem() self.centerWindow() self.initUI() # очнь странная конструкция def initUI(self): btn1 = Button( self.parent, text='', command=self.rem.open_file) #- example получаем и меняем переменную в другом классе print(f"get a - {self.rem.get_a()}") self.rem.set_a([1, 2]) print(f"get a after set_a([1, 2]) - {self.rem.get_a()}") #- btn1.place(x=5, y=5, height=32, width=32) self.lbl1 = Label( self.parent, text="Файл не выбран", font=("Arial", 10)) self.lbl1.place( relx=.5, rely=1, anchor="s", height=20, width=800) def centerWindow(self): w = 800 h = 600 sw = self.parent.winfo_screenwidth() sh = self.parent.winfo_screenheight() x = (sw - w) / 2 y = (sh - h) / 2 self.parent.geometry('%dx%d+%d+%d' % (w, h, x, y)) self.parent.resizable(False, False) def main(): root = Tk() global win win = Gui(root) root.mainloop() if __name__ == '__main__': main()
Отредактировано AD0DE412 (Март 23, 2021 19:22:29)
Офлайн
AD0DE412Да я и сам не очень понимаю, и выйдет ли вообще так, как хотелось бы…
не очень понимаю что у вас как и зачем
NovatorБуду пробовать, но наверное не сегодня
И второй вопрос прямо связан с первым - как получить значение переменной без вызова функции?
В данном случае - получить список “а”, но не писать что-то такое:
a = self.open_file()
Офлайн
Novator посмотрите вот тут https://www.russianlutheran.org/python/nardo/nardo.html
тутториал хоть и старый(как и ткинтер) но вполне актуальный. там есть примеры как из одного класса в ГУИ обратиться к другому..
[code python][/code]
Офлайн