Dynamic Sliverlight サンプルの clock を WPF-IronPythonに変換しました。
下記のBlogを参考にして、Drag可能な、時計にしました。
Blog: jimmy.thinking ⇒ Dragging elements in Silverlight with DLRConsole
http://blog.jimmy.schementi.com/2008/08/dragging-elements-in-silverlight-with.html
MSDN Blogs ⇒ 荒井省三のBlog ⇒ DLR Console を使って時計をドラッグするサンプル
http://blogs.msdn.com/b/shozoa/archive/2008/09/03/dragging-clock-on-dlr-console.aspx
下記のBlogを参考にして、Drag可能な、時計にしました。
Blog: jimmy.thinking ⇒ Dragging elements in Silverlight with DLRConsole
http://blog.jimmy.schementi.com/2008/08/dragging-elements-in-silverlight-with.html
MSDN Blogs ⇒ 荒井省三のBlog ⇒ DLR Console を使って時計をドラッグするサンプル
http://blogs.msdn.com/b/shozoa/archive/2008/09/03/dragging-clock-on-dlr-console.aspx
clock XAML⇒clock.xaml ⇒ アナログ時計
#
# clock.py
# ipy.exe clock.py
#
import clr
clr.AddReferenceByPartialName("PresentationFramework")
clr.AddReferenceByPartialName("PresentationCore")
clr.AddReference('WindowsBase')
from System import Object
from System.Windows.Markup import XamlReader
from System.Windows import Window, Application
from System.Windows.Controls import Canvas
from System.Windows.Media import Brushes
from datetime import datetime
def LoadXamlNet(strUrl):
import System
request = System.Net.WebRequest.Create(strUrl)
response = request.GetResponse()
dataStream = response.GetResponseStream()
try:
element = XamlReader.Load(dataStream)
finally:
dataStream.Close()
response.Close()
return element
class Clock(Object):
def __init__(self):
self.scene = LoadXamlNet("http://softgarden.lovepop.jp/myBlog/xaml/clock.xaml")
self.start()
def _fromAngle(self, time, divisor = 5, offset = 0):
return ((time / (12.0 * divisor)) * 360) + offset + 180
def _toAngle(self, time):
return self._fromAngle(time) + 360
def start(self):
d = datetime.now()
#self.scene.FindName('hourAnimation').From = self._fromAngle(d.hour, 1, d.minute/2)
#self.scene.FindName('hourAnimation').To = self._toAngle(d.hour)
from_h = self._fromAngle(d.hour, 1, d.minute/2)
to_h = from_h + 360.0
self.scene.FindName('hourAnimation').From = from_h
self.scene.FindName('hourAnimation').To = to_h
self.scene.FindName('minuteAnimation').From = self._fromAngle(d.minute)
self.scene.FindName('minuteAnimation').To = self._toAngle(d.minute)
self.scene.FindName('secondAnimation').From = self._fromAngle(d.second)
self.scene.FindName('secondAnimation').To = self._toAngle(d.second)
class Drag(object):
def __init__(self, root, obj):
self.click = None
self.obj = obj
self.root = root
def OnMouseLeftButtonDown(self, sender, e):
self.click = e.GetPosition(self.root)
self.sx = Canvas.GetLeft(self.obj)
self.sy = Canvas.GetTop(self.obj)
if (self.sx.IsNaN(self.sx)): self.sx = 0.0
if (self.sy.IsNaN(self.sy)): self.sy = 0.0
self.obj.CaptureMouse()
def OnMouseLeftButtonUp(self, sender, e):
if(self.click != None):
self.obj.ReleaseMouseCapture()
self.click = None
def OnMouseMove(self, sender, e):
if(self.click != None):
mouse_pos = e.GetPosition(self.root)
Canvas.SetLeft(self.obj, (self.sx + mouse_pos.X - self.click.X))
Canvas.SetTop(self.obj, (self.sy + mouse_pos.Y - self.click.Y))
def enable(self):
self.obj.MouseLeftButtonDown += self.OnMouseLeftButtonDown
self.obj.MouseLeftButtonUp += self.OnMouseLeftButtonUp
self.obj.MouseMove += self.OnMouseMove
def disable(self):
self.obj.MouseLeftButtonDown -= self.OnMouseLeftButtonDown
self.obj.MouseLeftButtonUp -= self.OnMouseLeftButtonUp
self.obj.MouseMove -= self.OnMouseMove
class ExWindow(Window):
def __init__(self):
self.Title = "Dynamic Languages Rock!"
self.Width = 640
self.Height = 480
self.Content = canvas = Canvas(Background = Brushes.LightGray)
self.clock = Clock().scene
canvas.Children.Add (self.clock)
#self.drag = Drag(root=canvas, obj=self.clock.FindName('parentCanvas'))
self.drag = Drag(root=canvas, obj=self.clock)
self.drag.enable()
if __name__ == "__main__":
win = ExWindow()
Application().Run(win)
# clock.py
# ipy.exe clock.py
#
import clr
clr.AddReferenceByPartialName("PresentationFramework")
clr.AddReferenceByPartialName("PresentationCore")
clr.AddReference('WindowsBase')
from System import Object
from System.Windows.Markup import XamlReader
from System.Windows import Window, Application
from System.Windows.Controls import Canvas
from System.Windows.Media import Brushes
from datetime import datetime
def LoadXamlNet(strUrl):
import System
request = System.Net.WebRequest.Create(strUrl)
response = request.GetResponse()
dataStream = response.GetResponseStream()
try:
element = XamlReader.Load(dataStream)
finally:
dataStream.Close()
response.Close()
return element
class Clock(Object):
def __init__(self):
self.scene = LoadXamlNet("http://softgarden.lovepop.jp/myBlog/xaml/clock.xaml")
self.start()
def _fromAngle(self, time, divisor = 5, offset = 0):
return ((time / (12.0 * divisor)) * 360) + offset + 180
def _toAngle(self, time):
return self._fromAngle(time) + 360
def start(self):
d = datetime.now()
#self.scene.FindName('hourAnimation').From = self._fromAngle(d.hour, 1, d.minute/2)
#self.scene.FindName('hourAnimation').To = self._toAngle(d.hour)
from_h = self._fromAngle(d.hour, 1, d.minute/2)
to_h = from_h + 360.0
self.scene.FindName('hourAnimation').From = from_h
self.scene.FindName('hourAnimation').To = to_h
self.scene.FindName('minuteAnimation').From = self._fromAngle(d.minute)
self.scene.FindName('minuteAnimation').To = self._toAngle(d.minute)
self.scene.FindName('secondAnimation').From = self._fromAngle(d.second)
self.scene.FindName('secondAnimation').To = self._toAngle(d.second)
class Drag(object):
def __init__(self, root, obj):
self.click = None
self.obj = obj
self.root = root
def OnMouseLeftButtonDown(self, sender, e):
self.click = e.GetPosition(self.root)
self.sx = Canvas.GetLeft(self.obj)
self.sy = Canvas.GetTop(self.obj)
if (self.sx.IsNaN(self.sx)): self.sx = 0.0
if (self.sy.IsNaN(self.sy)): self.sy = 0.0
self.obj.CaptureMouse()
def OnMouseLeftButtonUp(self, sender, e):
if(self.click != None):
self.obj.ReleaseMouseCapture()
self.click = None
def OnMouseMove(self, sender, e):
if(self.click != None):
mouse_pos = e.GetPosition(self.root)
Canvas.SetLeft(self.obj, (self.sx + mouse_pos.X - self.click.X))
Canvas.SetTop(self.obj, (self.sy + mouse_pos.Y - self.click.Y))
def enable(self):
self.obj.MouseLeftButtonDown += self.OnMouseLeftButtonDown
self.obj.MouseLeftButtonUp += self.OnMouseLeftButtonUp
self.obj.MouseMove += self.OnMouseMove
def disable(self):
self.obj.MouseLeftButtonDown -= self.OnMouseLeftButtonDown
self.obj.MouseLeftButtonUp -= self.OnMouseLeftButtonUp
self.obj.MouseMove -= self.OnMouseMove
class ExWindow(Window):
def __init__(self):
self.Title = "Dynamic Languages Rock!"
self.Width = 640
self.Height = 480
self.Content = canvas = Canvas(Background = Brushes.LightGray)
self.clock = Clock().scene
canvas.Children.Add (self.clock)
#self.drag = Drag(root=canvas, obj=self.clock.FindName('parentCanvas'))
self.drag = Drag(root=canvas, obj=self.clock)
self.drag.enable()
if __name__ == "__main__":
win = ExWindow()
Application().Run(win)
![]() | IronPythonの世界 (Windows Script Programming) |
荒井 省三 | |
ソフトバンク クリエイティブ |
![]() | エキスパートPythonプログラミング |
Tarek Ziade | |
アスキー・メディアワークス |
![]() | Pythonスタートブック |
辻 真吾 | |
技術評論社 |
※コメント投稿者のブログIDはブログ作成者のみに通知されます