Python/wxPython:如何在主框架的第二个框架中显示文本
我是Python/wxPython新手,我使用Python/wxPython:如何在主框架的第二个框架中显示文本,python,wxpython,Python,Wxpython,我是Python/wxPython新手,我使用wxFormBuilder创建了一个两帧的文本。目的是添加两个数字并在两个帧上显示结果OnAdd按钮单击 我已经尽了我所能,但没有成功 我的问题是,当Add按钮按下面的代码时,如何在第二个框架上调用FialAll结果显示; 注意:代码位于3个单独的文件中(q1.py、q2.py和q3.py)。q2.py是主运行文件,而q1.py和q2.py分别创建从wxFormBuilder生成的帧 q1.py import wx import wx.xrc cl
wxFormBuilder
创建了一个两帧的文本。目的是添加两个数字并在两个帧上显示结果OnAdd
按钮单击
我已经尽了我所能,但没有成功
我的问题是,当Add按钮按下面的代码时,如何在第二个框架上调用FialAll结果显示;
注意:代码位于3个单独的文件中(q1.py、q2.py和q3.py)。q2.py是主运行文件,而q1.py和q2.py分别创建从wxFormBuilder生成的帧
q1.py
import wx
import wx.xrc
class MyFrame1 ( wx.Frame ):
def __init__( self, parent ):
wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.CAPTION|wx.CLOSE_BOX|wx.MINIMIZE_BOX|wx.SYSTEM_MENU|wx.TAB_TRAVERSAL )
self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
Sizer1 = wx.BoxSizer( wx.VERTICAL )
Sizer2 = wx.GridSizer( 0, 2, 0, 0 )
self.val1 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
self.val1.SetFont( wx.Font( 30, 70, 90, 90, False, wx.EmptyString ) )
Sizer2.Add( self.val1, 1, wx.ALL|wx.EXPAND, 5 )
self.val2 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
self.val2.SetFont( wx.Font( 30, 70, 90, 90, False, wx.EmptyString ) )
Sizer2.Add( self.val2, 1, wx.ALL|wx.EXPAND, 5 )
self.Calc = wx.Button( self, wx.ID_ANY, u"Add", wx.DefaultPosition, wx.DefaultSize, 0 )
self.Calc.SetFont( wx.Font( 30, 70, 90, 90, False, wx.EmptyString ) )
Sizer2.Add( self.Calc, 1, wx.ALL|wx.EXPAND, 5 )
self.result = wx.StaticText( self, wx.ID_ANY, u"Result", wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_CENTRE )
self.result.Wrap( -1 )
self.result.SetFont( wx.Font( 30, 70, 90, 90, False, wx.EmptyString ) )
Sizer2.Add( self.result, 1, wx.ALL|wx.EXPAND, 5 )
Sizer1.Add( Sizer2, 1, wx.EXPAND, 5 )
self.SetSizer( Sizer1 )
self.Layout()
self.Centre( wx.BOTH )
# Connect Events
self.Calc.Bind( wx.EVT_BUTTON, self.addFunc )
def __del__( self ):
pass
#===================================================
#!/usr/bin/python
# -*- coding: utf-8 -*-
import wx
from q1 import MyFrame1
from q3 import MyFrame3
class MyFrame2(MyFrame1):
def __init__(self, parent):
MyFrame1.__init__ (self, parent)
def addFunc( self, event ):
val1 = float(self.val1.GetValue())
val2 = float(self.val2.GetValue())
add = val1 + val2
self.result.SetLabel(str(add))
self.result = MyFrame4(self)
self.result.Show()
self.Final_Result.SetLabel(str(add))
class MyFrame4(MyFrame3):
"""docstring for my_temp_Frame"""
def __init__(self, parent):
MyFrame3.__init__ (self, parent)
if __name__ == "__main__":
app = wx.App(0)
MyFrame2(None).Show()
app.MainLoop()
#===================================================
import wx
import wx.xrc
class MyFrame3 ( wx.Frame ):
def __init__( self, parent ):
wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,100 ), style = wx.CAPTION|wx.CLOSE_BOX|wx.MINIMIZE_BOX|wx.SYSTEM_MENU|wx.TAB_TRAVERSAL )
self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
Sizer1 = wx.BoxSizer( wx.VERTICAL )
Sizer2 = wx.GridSizer( 0, 2, 0, 0 )
self.Text = wx.TextCtrl( self, wx.ID_ANY, u"You result is:", wx.DefaultPosition, wx.DefaultSize, wx.TE_READONLY )
self.Text.SetFont( wx.Font( 20, 70, 90, 90, False, wx.EmptyString ) )
Sizer2.Add( self.Text, 1, wx.ALL|wx.EXPAND, 5 )
self.Final_Result = wx.StaticText( self, wx.ID_ANY, u"Final_Result", wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_CENTRE )
self.Final_Result.Wrap( -1 )
self.Final_Result.SetFont( wx.Font( 30, 70, 90, 90, False, wx.EmptyString ) )
self.Final_Result.SetForegroundColour( wx.Colour( 255, 255, 255 ) )
self.Final_Result.SetBackgroundColour( wx.Colour( 255, 0, 0 ) )
Sizer2.Add( self.Final_Result, 1, wx.ALL|wx.EXPAND, 5 )
Sizer1.Add( Sizer2, 1, wx.EXPAND, 5 )
self.SetSizer( Sizer1 )
self.Layout()
self.Centre( wx.BOTH )
def __del__( self ):
pass
#===================================================
q2.py
import wx
import wx.xrc
class MyFrame1 ( wx.Frame ):
def __init__( self, parent ):
wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.CAPTION|wx.CLOSE_BOX|wx.MINIMIZE_BOX|wx.SYSTEM_MENU|wx.TAB_TRAVERSAL )
self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
Sizer1 = wx.BoxSizer( wx.VERTICAL )
Sizer2 = wx.GridSizer( 0, 2, 0, 0 )
self.val1 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
self.val1.SetFont( wx.Font( 30, 70, 90, 90, False, wx.EmptyString ) )
Sizer2.Add( self.val1, 1, wx.ALL|wx.EXPAND, 5 )
self.val2 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
self.val2.SetFont( wx.Font( 30, 70, 90, 90, False, wx.EmptyString ) )
Sizer2.Add( self.val2, 1, wx.ALL|wx.EXPAND, 5 )
self.Calc = wx.Button( self, wx.ID_ANY, u"Add", wx.DefaultPosition, wx.DefaultSize, 0 )
self.Calc.SetFont( wx.Font( 30, 70, 90, 90, False, wx.EmptyString ) )
Sizer2.Add( self.Calc, 1, wx.ALL|wx.EXPAND, 5 )
self.result = wx.StaticText( self, wx.ID_ANY, u"Result", wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_CENTRE )
self.result.Wrap( -1 )
self.result.SetFont( wx.Font( 30, 70, 90, 90, False, wx.EmptyString ) )
Sizer2.Add( self.result, 1, wx.ALL|wx.EXPAND, 5 )
Sizer1.Add( Sizer2, 1, wx.EXPAND, 5 )
self.SetSizer( Sizer1 )
self.Layout()
self.Centre( wx.BOTH )
# Connect Events
self.Calc.Bind( wx.EVT_BUTTON, self.addFunc )
def __del__( self ):
pass
#===================================================
#!/usr/bin/python
# -*- coding: utf-8 -*-
import wx
from q1 import MyFrame1
from q3 import MyFrame3
class MyFrame2(MyFrame1):
def __init__(self, parent):
MyFrame1.__init__ (self, parent)
def addFunc( self, event ):
val1 = float(self.val1.GetValue())
val2 = float(self.val2.GetValue())
add = val1 + val2
self.result.SetLabel(str(add))
self.result = MyFrame4(self)
self.result.Show()
self.Final_Result.SetLabel(str(add))
class MyFrame4(MyFrame3):
"""docstring for my_temp_Frame"""
def __init__(self, parent):
MyFrame3.__init__ (self, parent)
if __name__ == "__main__":
app = wx.App(0)
MyFrame2(None).Show()
app.MainLoop()
#===================================================
import wx
import wx.xrc
class MyFrame3 ( wx.Frame ):
def __init__( self, parent ):
wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,100 ), style = wx.CAPTION|wx.CLOSE_BOX|wx.MINIMIZE_BOX|wx.SYSTEM_MENU|wx.TAB_TRAVERSAL )
self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
Sizer1 = wx.BoxSizer( wx.VERTICAL )
Sizer2 = wx.GridSizer( 0, 2, 0, 0 )
self.Text = wx.TextCtrl( self, wx.ID_ANY, u"You result is:", wx.DefaultPosition, wx.DefaultSize, wx.TE_READONLY )
self.Text.SetFont( wx.Font( 20, 70, 90, 90, False, wx.EmptyString ) )
Sizer2.Add( self.Text, 1, wx.ALL|wx.EXPAND, 5 )
self.Final_Result = wx.StaticText( self, wx.ID_ANY, u"Final_Result", wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_CENTRE )
self.Final_Result.Wrap( -1 )
self.Final_Result.SetFont( wx.Font( 30, 70, 90, 90, False, wx.EmptyString ) )
self.Final_Result.SetForegroundColour( wx.Colour( 255, 255, 255 ) )
self.Final_Result.SetBackgroundColour( wx.Colour( 255, 0, 0 ) )
Sizer2.Add( self.Final_Result, 1, wx.ALL|wx.EXPAND, 5 )
Sizer1.Add( Sizer2, 1, wx.EXPAND, 5 )
self.SetSizer( Sizer1 )
self.Layout()
self.Centre( wx.BOTH )
def __del__( self ):
pass
#===================================================
q3.py
import wx
import wx.xrc
class MyFrame1 ( wx.Frame ):
def __init__( self, parent ):
wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.CAPTION|wx.CLOSE_BOX|wx.MINIMIZE_BOX|wx.SYSTEM_MENU|wx.TAB_TRAVERSAL )
self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
Sizer1 = wx.BoxSizer( wx.VERTICAL )
Sizer2 = wx.GridSizer( 0, 2, 0, 0 )
self.val1 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
self.val1.SetFont( wx.Font( 30, 70, 90, 90, False, wx.EmptyString ) )
Sizer2.Add( self.val1, 1, wx.ALL|wx.EXPAND, 5 )
self.val2 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
self.val2.SetFont( wx.Font( 30, 70, 90, 90, False, wx.EmptyString ) )
Sizer2.Add( self.val2, 1, wx.ALL|wx.EXPAND, 5 )
self.Calc = wx.Button( self, wx.ID_ANY, u"Add", wx.DefaultPosition, wx.DefaultSize, 0 )
self.Calc.SetFont( wx.Font( 30, 70, 90, 90, False, wx.EmptyString ) )
Sizer2.Add( self.Calc, 1, wx.ALL|wx.EXPAND, 5 )
self.result = wx.StaticText( self, wx.ID_ANY, u"Result", wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_CENTRE )
self.result.Wrap( -1 )
self.result.SetFont( wx.Font( 30, 70, 90, 90, False, wx.EmptyString ) )
Sizer2.Add( self.result, 1, wx.ALL|wx.EXPAND, 5 )
Sizer1.Add( Sizer2, 1, wx.EXPAND, 5 )
self.SetSizer( Sizer1 )
self.Layout()
self.Centre( wx.BOTH )
# Connect Events
self.Calc.Bind( wx.EVT_BUTTON, self.addFunc )
def __del__( self ):
pass
#===================================================
#!/usr/bin/python
# -*- coding: utf-8 -*-
import wx
from q1 import MyFrame1
from q3 import MyFrame3
class MyFrame2(MyFrame1):
def __init__(self, parent):
MyFrame1.__init__ (self, parent)
def addFunc( self, event ):
val1 = float(self.val1.GetValue())
val2 = float(self.val2.GetValue())
add = val1 + val2
self.result.SetLabel(str(add))
self.result = MyFrame4(self)
self.result.Show()
self.Final_Result.SetLabel(str(add))
class MyFrame4(MyFrame3):
"""docstring for my_temp_Frame"""
def __init__(self, parent):
MyFrame3.__init__ (self, parent)
if __name__ == "__main__":
app = wx.App(0)
MyFrame2(None).Show()
app.MainLoop()
#===================================================
import wx
import wx.xrc
class MyFrame3 ( wx.Frame ):
def __init__( self, parent ):
wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,100 ), style = wx.CAPTION|wx.CLOSE_BOX|wx.MINIMIZE_BOX|wx.SYSTEM_MENU|wx.TAB_TRAVERSAL )
self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
Sizer1 = wx.BoxSizer( wx.VERTICAL )
Sizer2 = wx.GridSizer( 0, 2, 0, 0 )
self.Text = wx.TextCtrl( self, wx.ID_ANY, u"You result is:", wx.DefaultPosition, wx.DefaultSize, wx.TE_READONLY )
self.Text.SetFont( wx.Font( 20, 70, 90, 90, False, wx.EmptyString ) )
Sizer2.Add( self.Text, 1, wx.ALL|wx.EXPAND, 5 )
self.Final_Result = wx.StaticText( self, wx.ID_ANY, u"Final_Result", wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_CENTRE )
self.Final_Result.Wrap( -1 )
self.Final_Result.SetFont( wx.Font( 30, 70, 90, 90, False, wx.EmptyString ) )
self.Final_Result.SetForegroundColour( wx.Colour( 255, 255, 255 ) )
self.Final_Result.SetBackgroundColour( wx.Colour( 255, 0, 0 ) )
Sizer2.Add( self.Final_Result, 1, wx.ALL|wx.EXPAND, 5 )
Sizer1.Add( Sizer2, 1, wx.EXPAND, 5 )
self.SetSizer( Sizer1 )
self.Layout()
self.Centre( wx.BOTH )
def __del__( self ):
pass
#===================================================
提前感谢。只需在
q2.py中更改此行即可:
self.Final_Result.SetLabel(str(add))
为此:
self.result.Final_Result.SetLabel(str(add))
我很少看到一种更复杂的方法,在wxPython中有两个帧并将数据从一个帧传输到另一个帧。但也许你有充分的理由。如果没有,请查看。它至少为我打开了如何清晰地分离逻辑和GUI的大门
回答:你应该打电话:
self.result = MyFrame4(self)
# ...
self.Final_Result.SetLabel(str(add))
错误消息:
AttributeError: 'MyFrame2' object has no attribute 'Final_Result'
这仅仅意味着在MyFrame2
中没有最终结果。查看后,可以在MyFrame3
中找到最终结果,它是MyFrame4
的基类。我们还了解到MyFrame4
在MyFrame2
因此,只需将违规行更改为:
self.result.Final_Result.SetLabel(str(add))
您已经完成了。Photofinish:)很抱歉打扰您。@nepix32没问题:)谢谢大家,希望这对未来的人有帮助!这正是我想要实现的。