Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Разработка GUI > wx Application - создание и закрытие окна


Автор: GoD 8.2.2007, 13:48
Друзья, к примеру есть у нас код создания нового окна.
Код

import wxPython
from wxPython.wx import *

class MyFrame(wxFrame):
    def __init__(self, parent, ID, title, pos=wxDefaultPosition,
                 size=(900, 600), style=wxDEFAULT_FRAME_STYLE):
        wxFrame.__init__(self, parent, ID, title, pos, size, style)


class MyApp(wxApp):
    def OnInit(self):
        frame = MyFrame(NULL, -1, "Main Fraim")
        frame.Show(true)
        self.SetTopWindow(frame)
        return true

        
app = MyApp(0)
app.MainLoop()


Проблема в следующем, закрыть это окно можно только один раз, после повторного запуска нажимаем на закрытие, а окно не закрывается. 
Подскажите как сделать так чоб окно закрывалось всегда. 
Сразу предупреждаю, вариант с добавлением в конец программы кода - app.Destroy() , я знаю. Хотелось бы другие возможности узнать.

Автор: proDiva 12.2.2007, 10:15
У меня таких проблем нет, все открывается и закрывается)) Различие нашла только в одном:
18-ая строка "app = MyApp(0)", в моих приложениях - "app = MyApp(redirect=True)". Попробуй, может дело только в этом.

Автор: GoD 14.2.2007, 14:43
Цитата(proDiva @ 12.2.2007,  10:15)
У меня таких проблем нет, все открывается и закрывается)) Различие нашла только в одном:
18-ая строка "app = MyApp(0)", в моих приложениях - "app = MyApp(redirect=True)". Попробуй, может дело только в этом.

Да нет не помогает. После первого вмзова окно зарывается, а после воторого нивкакую... вылетает с ошибкой и все тут.

Автор: GoD 16.2.2007, 16:22
Все сделал. Надо просто добавить событие закрытия окна и проблем никаких не будет
Код

import wx

class MyFrame(wx.Frame):
    def __init__(self, parent, ID, title, pos, size):
        wx.Frame.__init__(self, parent, ID, title, pos, size)


class MyApp(wx.App):
    def __init__(self, redirect=True, filename=None):
        print "App __init__"
        wx.App.__init__(self, redirect, filename)

    
    def OnInit(self):
        global id, handle
        self.frame = MyFrame(parent=None, ID=-1, title="Main Fraim", pos = (50,50), size = (900,600))
        self.frame.Show()
        self.SetTopWindow(self.frame)
        self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
        return True

    def OnExit(self):
        print "OnExit"

    def OnCloseWindow(self, event):
        self.Destroy()
        

if __name__ == '__main__':
    app = MyApp(redirect=False)
    app.MainLoop()


А "redirect" указывает просто куда будет производиться вывод: при параметре redirect=False вывод будет в консоль, а при redirect=True в отдельное wxокно

Автор: Nashev 6.1.2008, 22:50
Я что-то не понял - у Вас в программе вписан один вызов окна, на инициализацию приложения  и средства в этой программе открыть окно второй раз я не вижу. О каком втором вызове окна идёт речь?

Автор: Increazon 14.9.2008, 11:42
Вопрос - при тестировании всех ваших кодов я получаю ошибку Traceback (most recent call last):
  File "C:\Program Files\Python25\Tools\Scripts\wx.py", line 9, in <module>
    import wx
  File "C:\Program Files\Python25\Tools\Scripts\wx.py", line 10, in <module>
    class MyFrame(wx.Frame):
AttributeError: 'module' object has no attribute 'Frame'

Но при запуске через Idle (всмысле если вводить все по строкам) - все работает.

Автор: Increazon 14.9.2008, 12:13
я нашел свою ошибку - wx.py - так я назвал свой скрипт, и когда вызывал модуль wx - области видимости путались и все глючило. вот дела господа программисты.

F:\Music\IxtoneMP3\05-Sonne (Instrumental).mp3

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)