【问题标题】:call a Frame2 from a button in Frame1从 Frame1 中的按钮调用 Frame2
【发布时间】:2014-08-09 18:21:49
【问题描述】:

我是python的新手,当我点击Frame1中的按钮时,我必须调用一个框架“Frame2”,我有这个错误:

这是我的代码:

global Frame2 fr
 def OnButton4Button(self, event):

        fr.Show()
        even.Skip()

注意:我使用 wxpython 和 boa 构造函数 感谢帮助

【问题讨论】:

  • 你有没有看到你的前两行之间有一个缩进错字,应该在同一列上对齐
  • 请申请PEP8推荐

标签: python button wxpython frame


【解决方案1】:

在你的短代码中,你在第二行有一个缩进,这是一个错误,你必须这样写:

from Frame2 import fr
def OnButton4Button(self, event):

        fr.Show()
        event.Skip()

你可以像下面的例子一样尊重 Python 中的缩进:

global var
def function():
    #indented block
    #should be always on the same column
    condition = 1
    if condition:
        #new indented block
        #is also aligned on a column
        print "something"
    #this is out of the IF block
#call the function
function()

PEP8 recommendations 中,您将找到避免缩进错误的规则。

【讨论】:

  • 感谢 daouzli,但我在全局 Frame2 fr 中仍然存在这个问题 :(
  • 确实,global Frame2 fr 在 Python 中无效。如果目标是定义 2 个全局变量,应该写成global Frame2, fr
  • 但是如果 Frame2 是一个模块,并且 fr 是模块的一个元素,您可以像这样从您的模块中导入 fr:from Frame2 import fr
【解决方案2】:

您的代码中有几个拼写错误。这是一个更正的示例:

from Frame2 import fr
def OnButton4Button(self, event):
    fr.Show()
    event.Skip()  # you need to spell event correctly

这假设 Frame2 是一个模块。大多数时候,您不需要在 Python 中使用全局变量。

为了更容易理解,我编写了一个示例,该示例在同一个模块中包含一个 MainFrame 类和一个 Frame2 类,因此您不必导入任何内容或使用全局变量:

import wx

########################################################################
class Frame2(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Frame2")
        panel = wx.Panel(self)



########################################################################
class MainFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Main Frame")
        panel = wx.Panel(self)

        button = wx.Button(panel, label="Open Frame2")
        button.Bind(wx.EVT_BUTTON, self.onButton)
        self.Show()

    #----------------------------------------------------------------------
    def onButton(self, event):
        """"""
        frame = Frame2()
        frame.Show()
        event.Skip()

if __name__ == "__main__":
    app = wx.App(False)
    frame = MainFrame()
    app.MainLoop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-29
    • 2018-08-15
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多