0

私はGUIとクラスに不慣れで、少し混乱しています。Python用のtkinterでボタンを使用すると、押されたときにそのコマンドを繰り返すことになります。しかし、私のプログラムではそれはしません。それに対抗する可能性のあるコードに何か問題がありますか?入力したものをすべてエコーする簡単なプログラムを作成しようとしています。

-ありがとう

from Tkinter import *
from PIL import Image, ImageTk
import tkMessageBox

class appsMain(Frame):

    def __init__(self,parent):
        Frame.__init__(self,parent)
        self.parent=parent

        self.initUI()
    def initUI(self):
        self.parent.title("OrganizedWindows")

        self.send=Text(self,bg="white",height=3,width=35)
        self.send.place(x=17,y=235)

        self.msg=Text(self,width=35,height=12,state="disable")
        self.msg.place(x=17,y=20)

        sendbtn=Button(self,text=" Listen ",command=self.accept)
        sendbtn.place(x=305,y=240)

        self.pack(fill=BOTH, expand=1)

    def accept(self,msg):
        self.msg.configure(state="normal")
        self.msg.insert(INSERT,msg+"\n")
        self.msg.insert(INSERT,"BYE")
        self.msg.configure(state="disable")

root=Tk()
root.geometry("350x300+300+300")
app=appsMain(root)
root.mainloop()
4

2 に答える 2

3

あなたのコードにはいくつかの問題があります。最初のものは簡単に解決されます:

sendbtn=Button(self,text=" Listen ",command=self.accept)

ボタンをクリックself.acceptすると、追加の引数なしで呼び出されるため、機能しません ( accept[selfmsg] の 2 つの引数が必要ですが、[ ] は 1 つしか取得されませんself)。

これは次の方法で回避できますlambda

sendbtn=Button(self,text=" Listen ",command=lambda : self.accept("some message here"))

(これは次と同等です):

def func:
    self.accept("some message here")

sendbtn=Button(self,text=" Listen ",command=func)

しかし、さまざまなメッセージを常に追加したいのか、それともどこから来たのかはわかりません。そのため、現時点で一般的な解決策を提示することは困難です。

Tkinter アプリケーションは、例外が発生した後でも引き続き実行されます。Tkinter アプリケーションを開発しているときに、ターミナルで例外を監視することをお勧めします (この場合、問題の原因を指摘してくれました)。

于 2012-06-26T18:21:08.963 に答える
0

これは、Lambda のコメントに関する質問に適切に回答するためのものです。Lambda は、関数を作成する簡単な方法です。設定する変数は、def myFunctionの関数の名前と同じです。次に、キーワードlambdaと、キーワード lambda の後に置く文字/単語は、関数のパラメーターにすぎないと言います。次に、コロンを置きます (通常の関数の場合と同じように -> def myFunction:)。その後、関数が返したいものを記述します。したがって、関数で特定の数値nを 2 乗したい場合、通常は次のように記述できます。

def square_num(n):
    return n**2

またはクールな Lambda として:

square_num = lambda n: n**2

通常の関数と同じように、必要な数のパラメーターを使用することもできます。そのため、x 乗された特定の数値について、次のように記述できます。

raise_num = lambda n, x: n**x
于 2014-01-05T01:45:01.553 に答える