Пытался самостоятельно, но уже совсем сник.
Я только начал изучать Питон и увидел здесь на сайте интересный примерчик создания окна, показывающего координаты курсора. У меня сразу появилась идея на основе этого создать миди-клавиатуру, но для начала я думал, разбираясь с логическими операциями сделать просто, чтоб появлялись не координаты, а названия нот. Для облегчения задачи я использовал wxGlade, но, оказалось, что всё совсем не так просто, ибо курсор виден только за пределами объектов. StaticBitmap не имеет атрибута SetValue. В связи с этим возникло 2 вопроса: как создать этот атрибут для картинки, или как сделать картинку невидимой для курсора?
Я не разобрался ещё как прикрепить файл, но чтобы не сочли, что я тут просто так вот текст:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# generated by wxGlade 0.6.3 on Sun Mar 28 16:40:54 2010
import wx
# begin wxGlade: extracode
# end wxGlade
class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
# begin wxGlade: MyFrame.__init__
kwds = wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.panel_1 = wx.Panel(self, -1)
self.panel_1.Bind(wx.EVT_MOTION, self.OnMove)
self.text_ctrl_1 = wx.TextCtrl(self.panel_1, -1, “”)
self.bitmap_1 = wx.StaticBitmap(self.panel_1, -1, wx.Bitmap(“/home/leonid/python/bitmap/midi_vk.png”, wx.BITMAP_TYPE_ANY), style=wx.WANTS_CHARS)
self.__set_properties()
self.__do_layout()
# end wxGlade
def __set_properties(self):
# begin wxGlade: MyFrame.__set_properties
self.SetTitle(“frame_1”)
self.SetSize((602, 300))
# end wxGlade
def __do_layout(self):
# begin wxGlade: MyFrame.__do_layout
sizer_1 = wx.BoxSizer(wx.VERTICAL)
sizer_2 = wx.BoxSizer(wx.VERTICAL)
sizer_2.Add(self.text_ctrl_1, 0, 0, 0)
sizer_2.Add(self.bitmap_1, 0, 0, 0)
self.panel_1.SetSizer(sizer_2)
sizer_1.Add(self.panel_1, 1, wx.EXPAND, 0)
self.SetSizer(sizer_1)
self.Layout()
# end wxGlade
# end of class MyFrame
def OnMove(self, event):
pos = event.GetPosition()
self.text_ctrl_1.SetValue(“%s, %s” % (pos.x, pos.y))
if __name__ == “__main__”:
app = wx.PySimpleApp(0)
wx.InitAllImageHandlers()
frame_1 = MyFrame(None, -1, “”)
app.SetTopWindow(frame_1)
frame_1.Show()
app.MainLoop()