私は何らかの種類のラッパー/クラスを作ろうとしましたが、GUIをtkinterでややシンプルにしました。私はこれが冗長であることを理解しています。コードをもっときれいにしたり小さくしたりすることはありませんが、私はそれをやり遂げることができたら挑戦したいと思っていました。ここに私のコードです。Pythonのカスタムtkinter GUIクラス/ラッパー関数がインスタンスごとに動作しません。
#!/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要素をスポーンすることができます。しかし、1つの要素、createLabelVarは最初のGUIでのみ動作します。私にこれを実証させてください。
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)は(a)には何も、ちょうど空のTkinterのウィンドウが表示されないテキスト「オーバーライドテキスト」が二Bysicのインスタンスでラベルを示しています。どのように表示されますか?なぜなら、createLabelVar関数はあるインスタンスでは動作しますが、他のインスタンスでは動作しないのですか?
ありがとうございます!