私はTkinterプロジェクトのオブジェクト指向プログラミングを教えてきました。しかし、私は、その目的が何であるかを完全には理解していないだけで、オンラインからさまざまなコーディングのコードをコピーするだけで惰走してきたことを認めなければなりません。オブジェクト指向のTkinterコーディング:テキストの変更と更新
これは、私のコードがまったく動作しない理由を私に導きました。私はなぜそうではないのか分かりません。最初の問題は、単に他のウィジェットの側面を変更することによる問題です。
私は、このサンプルコードがあります:「それが変更された」にボタンを押すと、「スタートページ」からラベルを変更する、シンプルな十分なコードであるべきである
import Tkinter as tk
LARGE_FONT = ("Verdana", 12)
class SeaofBTCapp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack(side="top", fill = "both", expand = True)
container.grid_rowconfigure(0, weight = 1)
container.grid_columnconfigure(0 , weight = 1)
self.frames = {}
frame = StartPage(container, self)
self.frames[StartPage] = frame
frame.grid(row = 0, column = 0, sticky = "nsew")
self.show_frame(StartPage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text = "Start Page", font = LARGE_FONT)
label.pack(pady = 10, padx = 10)
button = tk.Button(self, text = "Change Label", command = self.change)
button.pack(pady = 10, padx = 10)
def change(self):
label["text"] = "It has changed"
app = SeaofBTCapp()
app.mainloop()
を。しかし、私はそれを実行するたびに、グローバル変数 "label"は定義されていないと言います。さらに、私はそれをself.labelに変更すると、StartPageインスタンスに属性 'label'がないことが示されます。私は何が間違っているのか分からない。
同様に、私はSideBarクラスと1つのMainApplicationクラスに関連付けられたMainクラスを持つプロジェクトに取り組んでいます。 Mainクラスは値を受け取り、MainクラスのFrameにそれを表示します。これに続いて、サイドバーのボタンはその値を1だけ増やしますが、メインディスプレイは更新されず、サイドバーのボタンでメインの更新をどのように結びつけるのか分かりません。
import Tkinter as tk
something = [0, 6]
class Main():
def __init__(self, root):
mainboard = tk.Frame(root, height = 100, width = 100)
self.maincanvas = tk.Canvas(mainboard, bd = 1, bg = "white")
mainboard.grid(row = 0, column = 0)
self.maincanvas.grid(row = 0, column = 0)
self.maincanvas.create_text(45, 50, anchor = "center", text = str(something[1]))
class SideBar():
def __init__(self, root):
sidebarframe = tk.Frame(root, height = 100, width = 100)
button = tk.Button(sidebarframe, width = 20, text = "Change Value", command = self.add)
sidebarframe.grid(row = 0, column = 1)
button.grid(row = 0, column = 0)
def add(self):
something[1] += 1
print something[1]
class MainApplication():
def __init__(self, parent):
self.parent = parent
self.sidebar = SideBar(self.parent)
self.main = Main(self.parent)
if __name__ == "__main__":
root = tk.Tk()
MainApplication(root)
root.mainloop()
すべてのヘルプは感謝、私はまだ勉強として、専門用語の多くを使用してみないことになる下さい。最初のシナリオでは