2017-03-20 8 views
0

4つのボタンを制御するためのPython GUIを作成しようとしています。 GUIボタンは.grid()によって整列されます。私はそれをリリースするまでモーターを動かすボタンを押し続けることができるようにしたい。私は、プレスのために働くとイベントを離したが、私は.bind()が動作しない、この出力のようなコードを書くとき、私はGUIがグリッド付きtkinterボタンリリースイベント

from tkinter import * 
from tkinter import ttk 

def up(event): 
    print("up") 
def down(event): 
    print("down") 
def left(event): 
    print("left") 
def right(event): 
    print("right") 
def stopV(event): 
    print("stopV") 
def stopH(event): 
    print("stopH") 

root = Tk() 
root.title("Telescope Controller") 

mainframe = ttk.Frame(root, padding="3 3 12 12") 
mainframe.grid(column=0, row=0, sticky=(N, W, E, S)) 
mainframe.columnconfigure(0, weight=1) 
mainframe.rowconfigure(0, weight=1) 

Bup = ttk.Button(mainframe, text="Up").grid(column=2, row=1, sticky=(W, E)) 
#Bup.bind("<ButtonPress>",up) 
#Bup.bind("<ButtonRelease>",stopV) 
Bdwn = ttk.Button(mainframe, text="Down").grid(column=2, row=3, sticky=W) 
#Bdwn.bind("<ButtonPress>",down) 
#Bdwn.bind("<ButtonRelease>",stopV) 
Bl = ttk.Button(mainframe, text="Left").grid(column=1, row=2, sticky=E) 
#Bl.bind("<ButtonPress>",left) 
#Bl.bind("<ButtonRelease>",stopH) 
Br = ttk.Button(mainframe, text="Right").grid(column=3, row=2, sticky=W) 
#Br.bind("<ButtonPress>",right) 
#Br.bind("<ButtonRelease>",stopH) 

for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5) 

root.mainloop() 

以下のコードと同じように見えるようにすることができない例を見つけました

はAttributeError:私はボタンを押すために働く例を使用して動作します)(私は()の代わりに.pack .gridを使用することはできませんイベントを離すと「NoneType」オブジェクトには属性「バインド」

を持っていません。ボタンを押して、上記のコードにイベントをリリースする簡単な方法があるかどうか疑問に思っていました。

これは一般的な初心者の問題である

答えて

1

ありがとうございます。例では多く使われていますが、初期化と同じ行にレイアウト(あなたの場合はグリッド)を置くことはできません。あなたのボタンのすべてがこのようにする必要があります

Br = ttk.Button(mainframe, text="Right") 
Br.grid(column=3, row=2, sticky=W) 
0

ネヴァーマインドうわー、それは簡単な修正です....ここでは、同様の問題を持つ人のための更新作業のコードです:

from tkinter import * 
from tkinter import ttk 

def up(event): 
    print("up") 
def down(event):  
    print("down") 
def left(event): 
    print("left") 
def right(event): 
    print("right") 
def stopV(event): 
    print("stopV") 
def stopH(event): 
    print("stopH") 

root = Tk() 
root.title("Telescope Controller") 

mainframe = ttk.Frame(root, padding="3 3 12 12") 
mainframe.grid(column=0, row=0, sticky=(N, W, E, S)) 
mainframe.columnconfigure(0, weight=1) 
mainframe.rowconfigure(0, weight=1) 

Bup = ttk.Button(mainframe, text="Up") 
Bup.grid(column=2, row=1, sticky=(W, E)) 
Bup.bind("<ButtonPress>",up) 
Bup.bind("<ButtonRelease>",stopV) 
Bdwn = ttk.Button(mainframe, text="Down") 
Bdwn.grid(column=2, row=3, sticky=W) 
Bdwn.bind("<ButtonPress>",down) 
Bdwn.bind("<ButtonRelease>",stopV) 
Bl = ttk.Button(mainframe, text="Left") 
Bl.grid(column=1, row=2, sticky=E) 
Bl.bind("<ButtonPress>",left) 
Bl.bind("<ButtonRelease>",stopH) 
Br = ttk.Button(mainframe, text="Right") 
Br.grid(column=3, row=2, sticky=W) 
Br.bind("<ButtonPress>",right) 
Br.bind("<ButtonRelease>",stopH) 

for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5) 

root.mainloop() 
+0

あなたがしている場合は、あなた自身の質問に答えるつもりで、あなたが変更したことについての説明を書いてください。あなたのコードを再投稿しても、今後の読者は役に立たないでしょう。 – abccd

関連する問題