tkinter Frame 的界面切換和滾輪滑動界面

查找一下,在python的tkinter模塊中,不存在界面切換,提供Frame控件,控件容器,完成界面切換效果,並完成鼠標滾輪滑動界面效果

代碼

'''
Frame 完成界面刷新
'''
#導入模塊
from tkinter import *
#定義Frame 基類
class BaseFrame(Frame):

    def __init__(self,master):
        super().__init__(master=master)
        self.master = master

#定義基類
class BaseActivity:

    b = 0.0

    def __init__(self,master):
        self.master = master
        self.__setUI__()
        self.__addEvent()

    def __setUI__(self):
        self.interface = BaseFrame(self.master)
        self.interface['bg']='red'
        self.interface.pack(fill=BOTH,expand=1)
        frame_top = BaseFrame(self.interface)
        frame_top['bg']='blue'
        frame_top.pack(side=TOP,anchor=CENTER,fill=X)
        self.frame_top = frame_top
        self.title = Label(frame_top,text='標題')
        self.title.pack(side=LEFT,fill=X,expand=1)

        self.backbtn = Button(frame_top,text='返回',command=self.back)
        self.backbtn.pack(side=RIGHT)

        self.gobtn = Button(frame_top,text='下一頁',command=self.go)
        self.gobtn.pack(side=RIGHT)
        self.content = BaseFrame(self.interface)
        self.content.pack_propagate(0)
        self.content['bg']='green'
        self.content.pack(side=TOP, anchor=CENTER, fill=BOTH, expand=1)

        self.contentview = BaseFrame(self.content)
        self.contentview.place(relx=0,rely=0)
        for i in range(12):
            Label(self.contentview,text='{}-'.format(i)*8).pack(side=TOP)

        self.frame_bottom = BaseFrame(self.interface)
        self.frame_bottom['bg']='yellow'
        self.frame_bottom.pack(side=BOTTOM,fill=X)
        # Label(frame_bottom,text='bottom').pack()
        # photo = PhotoImage(file=r'images\gotop.png')

        self.topbtn = Button(self.content,text='╱︵╲\n(    ↑    )\n╲︶╱' )
        # # self.topbtn = Button(self.content,text='返回頂部',image=photo,compound='center')
        # self.topbtn = Button(self.content,width=40,height=40,text='返回頂部',fg='green',image=photo,compound='right',bg='red')
        # self.topbtn.pack(side=RIGHT)


    def __addEvent(self):
        self.content.bind('<MouseWheel>',self.mousewheel)
        self.topbtn.bind('<Button-1>',self.gotop)

    def gotop(self,event):
        self.b=0
        self.contentview.place_configure(rely=self.b)
        self.topbtn.pack_forget()

    def mousewheel(self,event):
        if event.delta > 0:
            self.b -= 0.1
        else:
            self.b += 0.1
        print(self.b)

        if self.b < 0:
            self.b=0
            return
        elif self.b>0:
            self.topbtn.pack_configure(side=RIGHT)

        self.contentview.place_configure( rely=self.b)

    # 返回
    def back(self):
        self.interface.destroy()
    # 下一頁
    def go(self):
        pass
# first -page
class MainActivity(BaseActivity):
    def __setUI__(self):
        super().__setUI__()
        # self.contentview.place_configure(relx=0.5,rely=0,anchor = CENTER)
        self.backbtn.config(text='退出')
        self.title.config( text='xx教育', font=('黑體', 28), bg='#D9D9D9')
        Label(self.frame_bottom,text='空白處可使用鼠標滾動',bg = '#FFFFFF').pack()
        # 如果是第一次打開,簡單介紹一下
        if 1:
            Label(self.contentview,text='welcome to here!').pack(anchor=CENTER)
        else:#不是第一次打開,直接進入界面
            pass
    def back(self):
        quit()
    def go(self):
        self.interface.destroy()
        ListAcitvity(self.master)

# second -page
class ListAcitvity(BaseActivity):
    def __setUI__(self):
        super().__setUI__()
        self.interface['bg']='green'
        self.gobtn.forget()

    # def __addEvent(self):
    #     super().__addEvent()

    def back(self):
        self.interface.destroy()
        MainActivity(self.master)

#定義窗口類--重寫窗口
class Win(Tk):
    def __init__(self):
        super().__init__()
        self.attributes('-fullscreen',True)
        self.title('試題練習')
        self.geometry('600x600')
        self['bg']='#FFFFFF'
        MainActivity(self)


#程序入口
if __name__ == '__main__':
    win = Win()

    win.mainloop()

運行效果:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章