wxPython: получение значений из Dialog и их использование вне класса Dialog

У меня есть этот простой диалог:

import wx  
import wx.lib.sized_controls as sc  
import time  
import datetime  
class Dialog(sc.SizedDialog):  
    def __init__(self, parent, id):  
        sc.SizedDialog.__init__(self, None, -1, "AuTel", style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER)            
        pane = self.GetContentsPane()  
        pane.SetSizerType("form")  

        wx.StaticText(pane, -1, "N1:")
        N1_BOX = wx.SpinCtrl(pane, -1, "", (40,40), (60,-1))
        N1_BOX.SetRange(1,1000)
        N1_BOX.SetValue(2)

        wx.StaticText(pane, -1, "N2:")
        N2_BOX = wx.SpinCtrl(pane, -1, "", (40,40), (60,-1))
        N2_BOX.SetRange(1,1000)
        N2_BOX.SetValue(10)

        wx.StaticText(pane, -1, "T1:")
        T1_BOX = wx.SpinCtrl(pane, -1, "", (40,40), (60,-1))
        T1_BOX.SetRange(1,60)
        T1_BOX.SetValue(4)

        wx.StaticText(pane, -1, "T2:")
        T2_BOX = wx.SpinCtrl(pane, -1, "", (40,40), (60,-1))
        T2_BOX.SetRange(1,60)
        T2_BOX.SetValue(5)

        RUN_BUTTON = self.SetButtonSizer(self.CreateStdDialogButtonSizer(wx.OK | wx.CANCEL))

        self.Fit()
        self.SetMinSize(self.GetSize())

app = wx.PySimpleApp()
dlg = Dialog(None, -1)
dlgrslt = dlg.ShowModal()

if dlgrslt != wx.ID_OK:
print ('Exiting..')
exit
else:
    pass
    print (N1+N2/T1-T2)

dlg.Destroy()
app.MainLoop()

Мне нужно, чтобы, когда я нажимаю OK, значения N1_BOX, N2_BOX, T1_BOX и T2_BOX были взяты, тогда я могу использовать их позже в сценарии для других целей. Что я должен сделать в своем сценарии, чтобы добиться этого? Кроме того, как я могу сделать другое окно для отображения результата N1+N2/T1-T2? Мне нужно, чтобы это окно было прикреплено к диалоговому окну, но я не знаю, как это сделать. Извините за мои основные вопросы, но я новичок в мире программирования.

С уважением, Амр


person Amr    schedule 09.04.2011    source источник


Ответы (1)


1: Доступ к входным значениям

Самый простой способ - сделать каждую "коробку" членом вашего класса.

то есть везде, где вы пишете N1_BOX, ставьте 'self.N1_BOX'.

Итак, в вашем вызывающем коде вы можете получить доступ к dlg.N1_BOX.GetValue()

valX = dlg.N1_BOX.GetValue()+dlg.N2_BOX.GetValue() / dlg.T1_BOX.GetValue()+dlg.T2_BOX.GetValue()
print valX

2: «Диалог результатов»:

Создайте второй класс, например ResultDialog, с дополнительным параметром в методе init. Затем вы можете передать новое значение в этот дополнительный параметр.

Итак, скажем, вы установили переменную valX, тогда вы можете передать ее следующим образом:

dlg2= ResultDialog(None,-1,str(valX))

Обратите внимание на использование str() для преобразования числа valX для представления на этикетке. Это можно сделать внутри метода init, но я поместил это здесь как подсказку.

ХТН

person laher    schedule 09.04.2011