我目前正在做一个tkinter项目,在这个项目中,我正在使用Canvas小部件更改帧。到目前为止,我有:
class StartPage(Frame):
#defines what is supposed to be running when the class is called
def __init__(self, parent, controller):
Frame.__init__(self, parent)#parent class = USBSecure
Frame.configure(self, background = 'dark grey')
self.frames = {}
#creates button to get to the help page
helppage = Canvas(self, width = 200, height = 50, background = mycolor)#, font = "Helvetica 16 bold italic", fg = 'silver')
helppage.create_text(100, (50/2), text = 'Help',font = "Helvetica 16 ")
#creates endProgram button
endPrgm = Canvas(self, width = 200, height = 50, background = mycolor)#, font = "Helvetica 16 bold italic", fg = 'silver')
endPrgm.create_text(100, (50/2), text = 'End the Program',font = "Helvetica 16 ")
#binds the buttons
helppage.bind('<Button-1>', self.screenChanger)
endPrgm.bind('<Button-1>', USBSecure.endProgram)
#grids the buttons
helppage.grid(row=0, column = 0, sticky='nsew')
endPrgm.grid(row=1, column = 0, sticky="nsew")
#help screen
def screenChanger(self, event):
for screen in (HelpPage,LogfilePage):
frame = screen(container, self)
self.frames[screen] = frame
frame.grid(row=0, column = 0, sticky="nsew")
frame = self.frames[HelpPage]
frame.tkraise()
上面的代码运行得很好,但是
我试图让screen changer函数接受另一个变量,比如pageNum
,如下所示:
#help screen
def screenChanger(self, event, pageNum):
for screen in (HelpPage,LogfilePage):
frame = screen(container, self)
self.frames[screen] = frame
frame.grid(row=0, column = 0, sticky="nsew")
if pageNum == 1:
frame = self.frames[HelpPage]
frame.tkraise()
然后我像这样传递pageNum
:
helppage.bind('<Button-1>', self.screenChanger(1))
但是,当我这样做的时候,我得到一个错误
TypeError: screenChanger() missing 1 required positional argument: 'pageNum'
>>>
我试过helppage.bind('<Button-1>', self.screenChanger(pageNum=1))
,但这给了我一个类似的错误
TypeError: screenChanger() missing 1 required positional argument: 'event'
>>>
为什么会发生这种情况,我该如何解决
编辑:
所以我考虑了维卡斯·达莫达尔所说的变化,所以现在我有了这个
#binds the buttons
helppage.bind('<Button-1>', self.screenChanger(Page = HelpPage))
logfile.bind('<Button-1>', self.screenChanger(Page = LogfilePage))
endPrgm.bind('<Button-1>', USBSecure.endProgram)
#grids the buttons
helppage.grid(row=0, column = 0, sticky='nsew')
logfile.grid(row=1, column = 0, sticky='nsew')
endPrgm.grid(row=2, column = 0, sticky="nsew")
#help screen
def screenChanger(Page, self, event=None):
frame = Page(container, self)
self.frames[Page] = frame
frame.grid(row=0, column = 0, sticky="nsew")
frame = self.frames[Page]
frame.tkraise()
但是,我现在得到了这个错误:
TypeError: screenChanger() got multiple values for argument 'Page'
在方法
screenChanger
中,您给出了2个参数event
和pageNum
,所以调用函数时必须同时传递这两个参数,否则可以给出一些默认值。从您的问题来看,我认为您只想传递
pageNum
。event
我看不到您在任何地方使用过。因此您可以这样尝试,它将为事件提供默认值然后你可以打电话 你的方法就像
self.screenChanger(pageNum=1)
相关问题 更多 >
编程相关推荐