我在 stackoverflow 上找到了一篇文章(在此處鏈接),測驗起來非常酷,但我終其一生都無法弄清楚如何顯示 page1,例如從第 2 頁開始。通常這是通過 MainView 類完成的,但我不希望這樣。
這是代碼:
#Thanks to Bryan Oakley
class Page(Frame):
def __init__(self, *args, **kwargs):
Frame.__init__(self, *args, **kwargs)
def show(self):
self.lift()
class Page1(Page):
def __init__(self, *args, **kwargs):
Page.__init__(self, *args, **kwargs)
label = Label(self, text="This is page 1").pack(side="top", fill="both", expand=True)
class Page2(Page):
def __init__(self, *args, **kwargs):
Page.__init__(self, *args, **kwargs)
label = Label(self, text="This is page 3").pack(side="top", fill="both", expand=True)
showp1 = Page1.show(root)
b1 = Button(self, text="Page 1",font='Helvetica 15 bold italic', command=showp1,bg='#444444',fg='white',padx=20)
b1.pack()
class MainView(Frame):
def __init__(self, *args, **kwargs):
Frame.__init__(self, *args, **kwargs)
p1 = Page1(self)
p2 = Page2(self)
我嘗試從 Page2 呼叫的一些東西:
Page1.show(root)
Page1.show(self)
Page1.show(Mainview(Root))
Page1.show(Page())
我已經嘗試了更多的東西,但無法弄清楚,如果有人可以提供幫助,也許給我一個簡短的解釋,那就太棒了!謝謝你,祝你有美好的一天!
uj5u.com熱心網友回復:
Page1是class,但你需要使用instance-p1
這需要分配實體self
class MainView(Frame):
def __init__(self, *args, **kwargs):
Frame.__init__(self, *args, **kwargs)
self.p1 = Page1(self)
self.p2 = Page2(self)
稍后在頁面中使用
self.master.p1.show()
self.master.p2.show()
如果您不想通過MainView然后執行此操作,則必須將實體分配給global變數 - 但這種方法不是首選。
# default value at start
#p1 = None
#p2 = None
class MainView(Frame):
def __init__(self, *args, **kwargs):
Frame.__init__(self, *args, **kwargs)
global p1
global p2
p1 = Page1(self)
p2 = Page2(self)
后來你可以使用p1,p2
p1.show()
p2.show()
編輯:
第一個版本的最小作業示例:
I had to use self.master.p2 in separated function change() because I couldn't use it driectly in __init__ because when I create p1 then it tries to access self.master.p2 which doesn't exist yet - and this raise error. If I use it in function then it tries to access self.master.p2 when I press button - and self.master.p2 already exists.
import tkinter as tk
class Page(tk.Frame):
def show(self):
self.lift()
class Page1(Page):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
label = tk.Label(self, text="This is page 1")
label.pack(side="top", fill="both", expand=True)
b1 = tk.Button(self, text="Show Page 2", command=self.change)
b1.pack()
def change(self):
self.master.p2.show()
class Page2(Page):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
label = tk.Label(self, text="This is page 2")
label.pack(side="top", fill="both", expand=True)
b1 = tk.Button(self, text="Show Page 1", command=self.change)
b1.pack()
def change(self):
self.master.p1.show()
class MainView(tk.Frame):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.p1 = Page1(self)
self.p1.grid(row=0, column=0, sticky='news')
self.p2 = Page2(self)
self.p2.grid(row=0, column=0, sticky='news')
self.p1.show()
# --- main ---
root = tk.Tk()
main = MainView(root)
main.pack()
root.mainloop()
```
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/439067.html
