0

ボタンを押すとtkウィンドウを更新したいのですが、目立ちます。助けていただければ幸いです。以下は私が試したことです。入力ボックスを変更して更新を押したときにtk.Label行を更新​​したいのですが、更新されません。

import Tkinter as tk

class MAIN(object):
    def __init__(self, master, **kwargs):
        frame = tk.Frame(master, borderwidth=5)
        frame.grid()
        et1 = tk.Entry(frame)
        et1.insert(0, '10')
        et1.grid(row=0,column=0,sticky=tk.W)
        tk.Label(frame, text = et1.get()).grid(row=1, column=0, sticky=tk.W)
        refresh = tk.Button(frame, text='Refresh', command = frame.update())
        refresh.grid(row=2, column=0, sticky=tk.W)

root=tk.Tk()
app=MAIN(root)
root.mainloop()

どんな助けでも大歓迎です。ありがとう

編集:

update_idletasks()も使おうとしましたが、うまくいきませんでした。

sc0ttのヘルプからの回答:

import Tkinter as tk

class MAIN(object):
    def __init__(self, master, **kwargs):
        frame = tk.Frame(master, borderwidth=5)
        frame.grid()
        self.et1 = tk.Entry(frame)
        self.et1.insert(0, 10)
        self.et1.grid(row=0,column=0,sticky=tk.W)
        self.label_contents = tk.StringVar()
        self.label_contents.set(self.et1.get())
        tk.Label(frame, textvariable=self.label_contents).grid(row=1, column=0, sticky=tk.W)
        refresh = tk.Button(frame, text='Refresh', command = self.refresh_hit)
        refresh.grid(row=2, column=0, sticky=tk.W)

    def refresh_hit(self):
        self.label_contents.set(self.et1.get())

root=tk.Tk()
app=MAIN(root)
root.mainloop()
4

3 に答える 3

2

update / update_idletasksを呼び出しても、それは行われません。これは、ボタンのコマンドで単純なラムダを使用してそれを行う方法です。テキストボックスの値を取得し、ラベルに関連付けられている変数を変更します。Tkinterをtkとしてインポートする

class MAIN(object):

    def __init__(self, master, **kwargs):
        frame = tk.Frame(master, borderwidth=5)
        frame.grid()
        et1 = tk.Entry(frame)
        et1.insert(0, 10)
        et1.grid(row=0,column=0,sticky=tk.W)
        label_contents = tk.StringVar()
        label_contents.set(et1.get())
        tk.Label(frame, textvariable=label_contents).grid(row=1, column=0, sticky=tk.W)
        refresh = tk.Button(frame, text='Refresh', command = self.refresh_clicked)
        refresh.grid(row=2, column=0, sticky=tk.W)

    #per comments:
    def refresh_clicked(event):
        #update labels here
root=tk.Tk()
app=MAIN(root)
root.mainloop()

編集:ラムダは関数呼び出しに置き換えられました。

于 2012-06-19T19:54:10.657 に答える
0
remove_button.grid(row=0, column=2)
refresh_button = tk.Button(master=buttons_frame, width=7, text='Refresh', 
command=seeTodo)

ウィンドウを更新するには、ボタンを使用してそのウィンドウを再度呼び出します。

于 2020-04-17T09:10:40.737 に答える
-1

これが、このスクリプトを機能させる唯一の方法でした。そうしないと、「self」が定義されていないというエラーが発生します。refresh_clickedで関数を追加する他の方法はありますか?

`

class MAIN(object):


    def __init__(self, master, **kwargs):
        global label_contents
        global et1
        frame = tk.Frame(master, borderwidth=5)
        frame.grid()
        et1 = tk.Entry(frame)
        et1.insert(0, 10)
        et1.grid(row=0,column=0,sticky=tk.W)
        label_contents = tk.StringVar()
        label_contents.set(et1.get())
        tk.Label(frame, textvariable=label_contents).grid(row=1, column=0, sticky=tk.W)
        refresh = tk.Button(frame, text='Refresh', command = self.refresh_clicked)
        refresh.grid(row=2, column=0, sticky=tk.W)

    #per comments:
    def refresh_clicked(event):
         global label_contents
         global et1
         label_contents.set(et1.get())

root=tk.Tk()
app=MAIN(root)
root.mainloop()

`

于 2016-01-14T02:51:26.527 に答える