#python #button #wxpython #frame
#python #кнопка #wxpython #фрейм
Вопрос:
Я новичок в python, я должен вызвать фрейм «Frame2», когда я нажимаю на кнопку из Frame1, у меня возникает эта ошибка:
это мой код:
global Frame2 fr
def OnButton4Button(self, event):
fr.Show()
even.Skip()
ПРИМЕЧАНИЕ: я работаю с wxpython и конструктором boa
, спасибо за помощь
Комментарии:
1. вы видели, что у вас есть опечатка отступа между двумя первыми строками, которые должны быть выровнены по одному столбцу
2. и, пожалуйста, примените рекомендации PEP8
Ответ №1:
В вашем коде есть несколько опечаток. Вот исправленный пример:
from Frame2 import fr
def OnButton4Button(self, event):
fr.Show()
event.Skip() # you need to spell event correctly
Предполагается, что Frame2 является модулем. В большинстве случаев вам не нужно использовать глобальные переменные в Python.
Чтобы сделать это немного проще, я написал пример, в котором есть класс мэйнфрейма и класс 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()
Ответ №2:
В вашем коротком коде у вас есть отступ во второй строке, это ошибка, вы должны написать это как:
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 вы найдете правила, позволяющие избежать ошибок отступов.
Комментарии:
1. спасибо daouzli, но у меня все еще есть эта проблема в глобальном Frame2 fr: (
2. действительно,
global Frame2 fr
недопустимо в Python. Если целью является определение 2 глобальных переменных, это должно быть записаноglobal Frame2, fr
.3. но если Frame2 является модулем, а fr — элементом модуля, вы можете импортировать fr из своего модуля следующим образом:
from Frame2 import fr