Я попытался создать какую-нибудь оболочку / класс, чтобы сделать графический интерфейс с tkinter несколько проще.Я понимаю, что это отчасти избыточно и не делает код намного красивее или меньше, но я просто хотел попробовать, смогу ли я это сделать.Вот мой код.
#!/usr/bin/env
from tkinter import *
import tkinter.messagebox
class Bysic():
def __init__(self):
self.app = Tk()
def createButton(self, label, row, col, command, sticky=W):
self.button = Button(self.app,text=label,command=command)
self.button.grid(row=row, column=col, sticky=sticky)
def setSize(self, width, height):
self.app.geometry(str(width)+"x"+str(height))
def setTitle(self, title):
self.app.title(title)
def createEntry(self, caption, row, col, width=None, defaultValue=None, alignment=W, **options):
self.entryLabel = Label(self.app, text=caption)
self.entryLabel.grid(row=row, column=col, sticky=W)
self.entry = Entry(self.app, **options)
if defaultValue:
self.entry.delete(0, END)
self.entry.insert(0, defaultValue)
if width:
self.entry.config(width=width)
self.entry.grid(row=row, column=col+1, sticky=W)
return self.entry
def createLabelVar(self, caption, row, col, alignment=W):
self.labelVar = StringVar()
self.labelVar.set(caption)
self.label = Label(self.app, textvar=self.labelVar)
self.label.grid(row=row, column=col, sticky=alignment)
return self.labelVar
def createLabel(self, caption, row, col, alignment=W):
self.staticLabel = Label(self.app, text=caption)
self.staticLabel.grid(row=row, column=col, sticky=alignment)
def appLoop(self):
self.app.mainloop()
def appKill(self):
self.app.destroy()
Теперь я могу создать экземпляр объекта Bysic и вызвать на нем элементы GUI.Однако один элемент createLabelVar работает только на первом графическом интерфейсе.Позвольте мне продемонстрировать это.
import bysic
x = Bysic()
label = x.createLabelVar("Original text",0,0)
label.set("Overriding text")
a = Bysic()
newLabel = a.createLabelVar("Original text",0,0)
newLabel.set("Override")
Первый экземпляр Bysic (x) действительно показывает метку с текстом «Перезаписывающий текст», однако второй экземпляр Bysic (a) ничего не показывает, просто пустой tkinterокно.
Как получается?Я имею в виду, x и a разделены, почему функция createLabelVar работает с одним экземпляром, но не с другим?
Заранее спасибо!