Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
fullcircle:32:python_ч_6 [2010/06/19 14:14] |
fullcircle:32:python_ч_6 [2013/10/09 10:33] (текущий) [FrameSecond code:] удаление лишнего кода |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ======HOW-TO: Программа на Python, Часть 5 ====== | + | ======HOW-TO: Программа на Python, Часть 6 ====== |
<style right> | <style right> | ||
//Автор — Грэг Валтерс (Greg Walters)// | //Автор — Грэг Валтерс (Greg Walters)// | ||
</style> | </style> | ||
+ | |||
- [[..:27:python_ч_1|Программа на Python — часть 1]] | - [[..:27:python_ч_1|Программа на Python — часть 1]] | ||
Строка 13: | Строка 14: | ||
- [[..:34:python_ч_8|Программа на Python — часть 8]] | - [[..:34:python_ч_8|Программа на Python — часть 8]] | ||
- [[..:35:python_ч_9|Программа на Python — часть 9]] | - [[..:35:python_ч_9|Программа на Python — часть 9]] | ||
+ | - [[..:36:python_ч_10|Программа на Python — часть 10]] | ||
+ | - [[..:37:python_ч_11|Программа на Python — часть 11]] | ||
+ | - [[..:38:python_ч_12|Программа на Python — часть 12]] | ||
+ | - [[..:39:python_ч_13|Программа на Python — часть 13]] | ||
+ | - [[..:40:python_ч_14|Программа на Python — часть 14]] | ||
Думаю, что вы поигрались с Boa Constructor со времени нашей последней встречи. Сначала мы напишем простую программу, которая открывает одно окно, а после нажатия кнопки — второе окно. В прошлый раз мы открывали окно сообщений. На этот раз мы откроем отдельное окно. Это будет полезно при создании приложений с несколькими окнами. Итак, приступим... | Думаю, что вы поигрались с Boa Constructor со времени нашей последней встречи. Сначала мы напишем простую программу, которая открывает одно окно, а после нажатия кнопки — второе окно. В прошлый раз мы открывали окно сообщений. На этот раз мы откроем отдельное окно. Это будет полезно при создании приложений с несколькими окнами. Итак, приступим... | ||
Строка 32: | Строка 38: | ||
{{ :fullcircle:32:screenshot_003.png?350 }} | {{ :fullcircle:32:screenshot_003.png?350 }} | ||
- | Теперь настала пора разобраться со второй формой. Откройте «FrameSecond» в режиме дизайнера. Задайте название «FrameSecond» и заголовок «Second Frame». Задайте центровку «wx.BOTH». Добавьте кнопку и выровняйте её в нижней части окна. Задайте название «btnFSExit» и заголовок «Exit». Создайте событие для кнопки. Добавьте элемент управления «wx.StaticText» в верхней части окна ближе к середине. Назовите его «stHiThere», задайте надпись «Hi there...I'm the second form!», начертание «Sans», размер 14 пт и плотность «wxBOLD». Теперь сбросьте положение, чтобы в форме кнопка была выровнена справа и слева. Это можно сделать, сняв галочку с атрибута «Position», и изменять положение «X» для сдвига кнопки вправо и влево, и положение «Y» для сдвига кнопки вверх и вниз до тех пор, пока результат не удовлетворит вас. Запишите изменения и сохраните их. | + | Теперь настала пора разобраться со второй формой. Откройте «FrameSecond» в режиме дизайнера. Задайте название «FrameSecond» и заголовок «Second Frame». Задайте центровку «wx.BOTH». Добавьте кнопку и выровняйте её в нижней части окна. Задайте название «btnFSExit» и заголовок «Exit». Создайте событие для кнопки. Добавьте элемент управления «wx.StaticText» в верхней части окна ближе к середине. Назовите его «stHiThere», задайте надпись «Hi there...I'm the second form!», начертание «Sans», размер 14 пт и плотность «wxBOLD»(Props->Font). Теперь сбросьте положение, чтобы в форме кнопка была выровнена справа и слева. Это можно сделать, сняв галочку с атрибута «Position», и изменять положение «X» для сдвига кнопки вправо и влево, и положение «Y» для сдвига кнопки вверх и вниз до тех пор, пока результат не удовлетворит вас. Запишите изменения и сохраните их. |
После того как мы создали формы, мы напишем код, который «склеит» их все. | После того как мы создали формы, мы напишем код, который «склеит» их все. | ||
Строка 71: | Строка 77: | ||
В следующий раз мы отложим в сторону программирование интерфейсов и рассмотрим программирование баз данных. До следующего раза установите на свою систему python-apsw и python-mysqldb. Для SQLite также понадобятся sqlite и sqlitebrowser. Если вы хотите поэкспериментировать с MySql, это прекрасно. Все пакеты устанавливаются с помощью Synaptic. | В следующий раз мы отложим в сторону программирование интерфейсов и рассмотрим программирование баз данных. До следующего раза установите на свою систему python-apsw и python-mysqldb. Для SQLite также понадобятся sqlite и sqlitebrowser. Если вы хотите поэкспериментировать с MySql, это прекрасно. Все пакеты устанавливаются с помощью Synaptic. | ||
+ | |||
+ | =====Коды===== | ||
+ | |||
+ | ====GUI2 code:==== | ||
+ | |||
+ | <code>#!/usr/bin/env python | ||
+ | #Boa:App:BoaApp | ||
+ | |||
+ | import wx | ||
+ | |||
+ | import FrameMain | ||
+ | import FrameSecond | ||
+ | |||
+ | modules ={u'FrameMain': [1, 'Main frame of Application', u'FrameMain.py'], | ||
+ | u'FrameSecond': [0, '', u'FrameSecond.py']} | ||
+ | |||
+ | class BoaApp(wx.App): | ||
+ | def OnInit(self): | ||
+ | self.main = FrameMain.create(None) | ||
+ | self.main.Show() | ||
+ | self.SetTopWindow(self.main) | ||
+ | return True | ||
+ | |||
+ | def main(): | ||
+ | application = BoaApp(0) | ||
+ | application.MainLoop() | ||
+ | |||
+ | if __name__ == '__main__': | ||
+ | main()</code> | ||
+ | |||
+ | ====FrameMain code:==== | ||
+ | |||
+ | <code>#Boa:Frame:FrameMain | ||
+ | |||
+ | import wx | ||
+ | import FrameSecond | ||
+ | |||
+ | def create(parent): | ||
+ | return FrameMain(parent) | ||
+ | |||
+ | [wxID_FRAMEMAIN, wxID_FRAMEMAINBTNEXIT, wxID_FRAMEMAINBTNSHOWNEW, | ||
+ | wxID_FRAMEMAINPANEL1, | ||
+ | ] = [wx.NewId() for _init_ctrls in range(4)] | ||
+ | |||
+ | class FrameMain(wx.Frame): | ||
+ | def _init_ctrls(self, prnt): | ||
+ | # generated method, don't edit | ||
+ | wx.Frame.__init__(self, id=wxID_FRAMEMAIN, name=u'FrameMain', | ||
+ | parent=prnt, pos=wx.Point(846, 177), size=wx.Size(400, 340), | ||
+ | style=wx.DEFAULT_FRAME_STYLE, title=u'Main Frame') | ||
+ | self.SetClientSize(wx.Size(400, 340)) | ||
+ | self.Center(wx.BOTH) | ||
+ | |||
+ | self.panel1 = wx.Panel(id=wxID_FRAMEMAINPANEL1, name='panel1', | ||
+ | parent=self, pos=wx.Point(0, 0), size=wx.Size(400, 340), | ||
+ | style=wx.TAB_TRAVERSAL) | ||
+ | |||
+ | self.btnShowNew = wx.Button(id=wxID_FRAMEMAINBTNSHOWNEW, | ||
+ | label=u'Show the other frame', name=u'btnShowNew', | ||
+ | parent=self.panel1, pos=wx.Point(120, 103), size=wx.Size(168, 29), | ||
+ | style=0) | ||
+ | self.btnShowNew.SetBackgroundColour(wx.Colour(25, 175, 23)) | ||
+ | self.btnShowNew.Bind(wx.EVT_BUTTON, self.OnBtnShowNewButton, | ||
+ | id=wxID_FRAMEMAINBTNSHOWNEW) | ||
+ | FrameMain Code (cont.): | ||
+ | self.btnExit = wx.Button(id=wxID_FRAMEMAINBTNEXIT, label=u'Exit', | ||
+ | name=u'btnExit', parent=self.panel1, pos=wx.Point(162, 191), | ||
+ | size=wx.Size(85, 29), style=0) | ||
+ | self.btnExit.SetBackgroundColour(wx.Colour(225, 218, 91)) | ||
+ | self.btnExit.Bind(wx.EVT_BUTTON, self.OnBtnExitButton, | ||
+ | id=wxID_FRAMEMAINBTNEXIT) | ||
+ | |||
+ | def __init__(self, parent): | ||
+ | self._init_ctrls(parent) | ||
+ | self.Fs = FrameSecond.FrameSecond(self) | ||
+ | |||
+ | def OnBtnShowNewButton(self, event): | ||
+ | #event.Skip() | ||
+ | self.Fs.Show() | ||
+ | self.Hide() | ||
+ | |||
+ | def OnBtnExitButton(self, event): | ||
+ | #event.Skip() | ||
+ | self.Close()</code> | ||
+ | |||
+ | ====FrameSecond code:==== | ||
+ | |||
+ | <code>#Boa:Frame:FrameSecond | ||
+ | |||
+ | import wx | ||
+ | |||
+ | def create(parent): | ||
+ | return FrameSecond(parent) | ||
+ | |||
+ | [wxID_FRAMESECOND, wxID_FRAMESECONDBTNFSEXIT, wxID_FRAMESECONDPANEL1, | ||
+ | wxID_FRAMESECONDSTATICTEXT1, | ||
+ | ] = [wx.NewId() for _init_ctrls in range(4)] | ||
+ | |||
+ | class FrameSecond(wx.Frame): | ||
+ | def _init_ctrls(self, prnt): | ||
+ | # generated method, don't edit | ||
+ | wx.Frame.__init__(self, id=wxID_FRAMESECOND, name=u'FrameSecond', | ||
+ | parent=prnt, pos=wx.Point(849, 457), size=wx.Size(419, 236), | ||
+ | style=wx.DEFAULT_FRAME_STYLE, title=u'Second Frame') | ||
+ | self.SetClientSize(wx.Size(419, 236)) | ||
+ | self.Center(wx.BOTH) | ||
+ | self.SetBackgroundStyle(wx.BG_STYLE_COLOUR) | ||
+ | |||
+ | self.panel1 = wx.Panel(id=wxID_FRAMESECONDPANEL1, name='panel1', | ||
+ | parent=self, pos=wx.Point(0, 0), size=wx.Size(419, 236), | ||
+ | style=wx.TAB_TRAVERSAL) | ||
+ | |||
+ | self.btnFSExit = wx.Button(id=wxID_FRAMESECONDBTNFSEXIT, label=u'Exit', | ||
+ | name=u'btnFSExit', parent=self.panel1, pos=wx.Point(174, 180), | ||
+ | size=wx.Size(85, 29), style=0) | ||
+ | self.btnFSExit.Bind(wx.EVT_BUTTON, self.OnBtnFSExitButton, | ||
+ | id=wxID_FRAMESECONDBTNFSEXIT) | ||
+ | |||
+ | self.staticText1 = wx.StaticText(id=wxID_FRAMESECONDSTATICTEXT1, | ||
+ | label=u"Hi there...I'm the second form!", name='staticText1', | ||
+ | parent=self.panel1, pos=wx.Point(45, 49), size=wx.Size(336, 23), | ||
+ | style=0) | ||
+ | self.staticText1.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD, | ||
+ | False, u'Sans')) | ||
+ | |||
+ | def __init__(self, parent): | ||
+ | self._init_ctrls(parent) | ||
+ | self.parent = parent | ||
+ | |||
+ | def OnBtnFSExitButton(self, event): | ||
+ | #event.Skip() | ||
+ | self.parent.Show() | ||
+ | self.Hide()</code> | ||
--------------------------------------- | --------------------------------------- |