Üksteist

Täna vaatame veel edasi võimalusi luua graafilisi ehk akendes töötavaid programme. Seekord võtame selleks veidi teise akenderaamistiku nimega wx.

#!/usr/bin/python
# -*- coding: utf-8 -*-
import wx
#esmalt teeme raami ehk akna
class MinuRaam(wx.Frame):
    def __init__(self):
       wx.Frame.__init__(self, None, -1, "Minu raam", size=(300, 300))
       paneel = wx.Panel(self, -1) # raami (frame) lisatav paneel
       # kui hiir on paneelil, siis pannakse toimetama meetod Liigub (all pool)
       paneel.Bind(wx.EVT_MOTION, self.Liigub)
       # lisatakse seisev tekst "Hiire koht:"
       wx.StaticText(paneel, -1, "Hiire koht:", pos=(10, 12))
       self.kohaNaitaja = wx.TextCtrl(paneel, -1, "", pos=(90, 10)) # lisatakse tekstikast, milles saab teksti vahetada
    def Liigub(self, event): #meetod Liigub
       pos = event.GetPosition() # küsitakse hiire koordinaadid
       self.kohaNaitaja.SetValue("%s, %s" % (pos.x, pos.y)) # seatakse tekstikastis koordinaadid õigeks
if __name__ == '__main__':
    rakendus = wx.PySimpleApp()
    raam = MinuRaam()
    raam.Show(True)
    rakendus.MainLoop()

Pildi näitamine:

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""Tere wxPython!""" # dokument-kommentaar programmi juurde
import wx
class Raam(wx.Frame): # Raam on wx.Frame alamklass ehk järglasobjekt
    """Raam, mis kuvab pilti."""
    def __init__(self, pilt, vanem=None, id=-1,
          koht=wx.DefaultPosition,
          tiitel='Tere, wxPython!'):
       """Loob raami ja kuvab pildi."""
       temp = pilt.ConvertToBitmap()
       suurus= temp.GetWidth(), temp.GetHeight()
       wx.Frame.__init__(self, vanem, id, tiitel, koht, suurus)
       self.bmp = wx.StaticBitmap(parent=self, bitmap=temp)
class Rakend(wx.App):
    """Rakendus klass"""
    def OnInit(self):
       pilt = wx.Image('logo2.jpg', wx.BITMAP_TYPE_JPEG)
       self.frame = Raam(pilt)
       self.frame.Show()
       self.SetTopWindow(self.frame)
       return True
def peamine():
    rakendus= Rakend()
    rakendus.MainLoop()
#programmi põhimeetod
if __name__ == '__main__':
    peamine()

Joone tõmbamine 1 sekund pärast akna loomist:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import wx
class naide(wx.Frame):
    def __init__(self, parent, title):
       super(naide, self).__init__(parent, title=title,
          size=(350, 170))
       wx.FutureCall(1000, self.joonistajoon)
       self.Centre()
       self.Show()
    def joonistajoon(self):
       dc = wx.ClientDC(self)
       dc.DrawLine(50, 30, 290, 150)
if __name__ == '__main__':
    rakendus = wx.App()
    naide(None, 'Line')
    rakendus.MainLoop()

#!/usr/bin/python
# Pliiatsid.py
import wx
class Pliiatsid(wx.Frame):
    def __init__(self, parent, id, title):
       wx.Frame.__init__(self, parent, id, title, size=(350, 190))
       self.Bind(wx.EVT_PAINT, self.joonistaja)
       self.Centre()
       self.Show(True)
    def joonistaja(self, event):
       dc = wx.PaintDC(self)

       dc.SetPen(wx.Pen('#000000', 1, wx.SOLID))
       dc.SetBrush(wx.Brush('#c56c00'))
       dc.DrawRectangle(10, 15, 90, 60)

       dc.SetPen(wx.Pen('#000000', 1, wx.DOT))
       dc.SetBrush(wx.Brush('#1ac500'))
       dc.DrawRectangle(130, 15, 90, 60)

       dc.SetPen(wx.Pen('#000000', 1, wx.LONG_DASH))
       dc.SetBrush(wx.Brush('#539e47'))
       dc.DrawRectangle(250, 15, 90, 60)

       dc.SetPen(wx.Pen('#000000', 1, wx.SHORT_DASH))
       dc.SetBrush(wx.Brush('#004fc5'))
       dc.DrawRectangle(10, 105, 90, 60)

       dc.SetPen(wx.Pen('#000000', 1, wx.DOT_DASH))
       dc.SetBrush(wx.Brush('#c50024'))
       dc.DrawRectangle(130, 105, 90, 60)

       dc.SetPen(wx.Pen('#000000', 1, wx.TRANSPARENT))
       dc.SetBrush(wx.Brush('#5f3b00'))
       dc.DrawRectangle(250, 105, 90, 60)

app = wx.App()
Pliiatsid(None, -1, 'Pliiatsid')
app.MainLoop()

Joonlaud on kasulik elementide kauguse mõõtmiseks :)
#!/usr/bin/python
import wx

RW = 701 # ruler widht
RM = 10 # ruler margin
RH = 60 # ruler height

class Ruler1(wx.Frame):
    def __init__(self, parent, id, title):
       wx.Frame.__init__(self, parent, id, title, size=(RW + 2*RM, 60),
          style=wx.FRAME_NO_TASKBAR | wx.NO_BORDER | wx.STAY_ON_TOP)
       self.font = wx.Font(7, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL,
          wx.FONTWEIGHT_BOLD, False, 'Courier 10 Pitch')
       self.Bind(wx.EVT_PAINT, self.OnPaint)
       self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
       self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
       self.Bind(wx.EVT_MOTION, self.OnMouseMove)
       self.Centre()
       self.Show(True)
    def OnPaint(self, event):
       dc = wx.PaintDC(self)
       brush = wx.Brush('#0d0060')
       dc.SetBrush(brush)
       dc.DrawRectangle(0, 0, RW+2*RM, RH)
       dc.SetFont(self.font)
       dc.SetPen(wx.Pen('#F8FF25'))
       dc.SetTextForeground('#F8FF25')
       for i in range(RW):
          if not (i % 100):
             dc.DrawLine(i+RM, 0, i+RM, 10)
             w, h = dc.GetTextExtent(str(i))
             dc.DrawText(str(i), i+RM-w/2, 11)
          elif not (i % 20):
             dc.DrawLine(i+RM, 0, i+RM, 8)
          elif not (i % 2): dc.DrawLine(i+RM, 0, i+RM, 4)
    def OnLeftDown(self, event):
       pos = event.GetPosition()
       x, y = self.ClientToScreen(event.GetPosition())
       ox, oy = self.GetPosition()
       dx = x - ox
       dy = y - oy
       self.delta = ((dx, dy))
    def OnMouseMove(self, event):
       if event.Dragging() and event.LeftIsDown():
          x, y = self.ClientToScreen(event.GetPosition())
          fp = (x - self.delta[0], y - self.delta[1])
          self.Move(fp)
    def OnRightDown(self, event):
       self.Close()
app = wx.App()
Ruler1(None, -1, '')
app.MainLoop()

Rubriigid: Uncategorized. Salvesta püsiviide oma järjehoidjasse.

Lisa kommentaar