更改帧和函数参数

2024-09-29 18:54:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在做一个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'

Tags: theselfframesbindpagecolumnbuttonscreen
1条回答
网友
1楼 · 发布于 2024-09-29 18:54:20

在方法screenChanger中,您给出了2个参数eventpageNum,所以调用函数时必须同时传递这两个参数,否则可以给出一些默认值。
从您的问题来看,我认为您只想传递pageNumevent我看不到您在任何地方使用过。因此您可以这样尝试,它将为事件提供默认值

def screenChanger(self, event=None, pageNum):
    for screen in (HelpPage,LogfilePage):
       frame = screen(container, self) 
.....

然后你可以打电话 你的方法就像self.screenChanger(pageNum=1)

相关问题 更多 >

    热门问题