2011-09-17 12 views
1

まず、これは私の現在のコード、それの重要な部分である:私は達成しようとしています何Tkinterのウィンドウハンドルをドラッグしますか?すべての

class WindowDraggable():   
    x = 1 
    y = 1 
    def __init__(self,label): 
     label.bind('<ButtonPress-1>',self.StartMove); 
     label.bind('<ButtonRelease-1>',self.StopMove); 
     label.bind('<B1-Motion>',self.OnMotion); 

    def StartMove(self,event): 
     self.x = event.x 
     self.y = event.y 

    def StopMove(self,event): 
     self.x = None 
     self.y = None 

    def OnMotion(self,event): 
     deltaX = event.x - self.x 
     deltaY = event.y - self.y 
     self.x = root.winfo_x() + deltaX 
     self.y = root.winfo_y() + deltaY 
     root.geometry("+%sx+%s" % (self.x,self.y)) 

#root is my window: 
root = Tk() 

#This is how I assign the class to label 
WindowDraggable(label) 

#All imports 
from Tkinter import * 
from PIL import Image, ImageTk 
import sys 
import re 

です。ウィンドウハンドルをハンドルでドラッグ可能にします(この場合はlabel)。私は実際にそれがどのように動作するかを実際に記述することはできませんが、マウスをたどらないだけでウィンドウを移動します。

私はPythonの完全な新人ですので、私に同行してください。どのような助けに感謝:)クラスの書き換えは大丈夫です、私はそれが本当にひどく書かれていることを知っています。

+1

質問は何ですか? –

+0

私はPythonでの私のスキルがそれに十分な広さではないように見えるので、これを生かすには援助が必要です。これは基本的に同じクラスの簡略化された例を意味します。 –

+0

このコードは、この回答からコピーされたようです:https://stackoverflow.com/a/4055612/7432 –

答えて

2

は、ここで少し例を示します

from Tkinter import * 
root = Tk() 

class WindowDraggable(): 

    def __init__(self, label): 
     self.label = label 
     label.bind('<ButtonPress-1>', self.StartMove) 
     label.bind('<ButtonRelease-1>', self.StopMove) 
     label.bind('<B1-Motion>', self.OnMotion) 

    def StartMove(self, event): 
     self.x = event.x 
     self.y = event.y 

    def StopMove(self, event): 
     self.x = None 
     self.y = None 

    def OnMotion(self,event): 
     x = (event.x_root - self.x - self.label.winfo_rootx() + self.label.winfo_rootx()) 
     y = (event.y_root - self.y - self.label.winfo_rooty() + self.label.winfo_rooty()) 
     root.geometry("+%s+%s" % (x, y)) 

label = Label(root, text='drag me') 
WindowDraggable(label) 
label.pack() 
root.mainloop() 

あなたはそれがほとんど右持っていたが、あなたは、ラベル自体の中でのオフセットを補償することがあります。私の例では、ウィンドウ境界を補正しないことに注意してください。これを理解するためには、特定のツールを使用する必要があります(この例は、overrideredirect(1)を使用すると完全に動作します)。

私は別のプログラミング言語から来ていると思いますので、それは、:

  • Pythonは;と文終わらない(しばらく有効な構文を、それを行うには理由がありません)
  • メソッド名は、いずれかの一貫look_like_thisまたはlookLikeThis
  • 変数は必要ありません必要があります。あなたがcreaにしたいならばインスタンス変数は__init__になります(クラス変数が必要な場合を除き、メソッドの外にはありません)。
関連する問題