навигация вызова Python из другого файла - PullRequest
0 голосов
/ 12 марта 2019

как мне выполнить переход на вторую страницу из события, которое происходит в другом файле Python?это будет мой графический код:

import tkinter as tk
from tkinter import *
import openf

class Page(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
    def show(self):
        self.lift()

class Page1(Page):
   def __init__(self, *args, **kwargs):
       Page.__init__(self, *args, **kwargs)
       label = tk.Label(self, text="first page")
       label.pack(side="top", fill="both", expand=True)

class Page2(Page):
   def __init__(self, *args, **kwargs):
       Page.__init__(self, *args, **kwargs)


class MainView(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
        p1 = Page1(self)
        p2 = Page2(self)


        container = tk.Frame(self)

        container.pack(side="top", fill="both", expand=True)

        p1.place(in_=container, x=0, y=0, relwidth=1, relheight=1)
        p2.place(in_=container, x=0, y=0, relwidth=1, relheight=1)
        p1.show()


if __name__ == "__main__":
    root = tk.Tk()
    main = MainView(root)
    root.resizable(0, 0)
    menubar = Menu(root)
    filemenu = Menu(menubar, tearoff=0)
    filemenu.add_command(label="Open", command=openf.openfiledialog)
    filemenu.add_command(label="Save", command=root.quit)
    filemenu.add_separator()
    filemenu.add_command(label="Exit", command=root.quit)
    menubar.add_cascade(label="File", menu=filemenu)
    root.config(menu=menubar)
    main.pack(side="top", fill="both", expand=True)
    root.wm_geometry("500x600")

Мне не нужно использовать кнопки для навигации.Я хочу перейти на вторую страницу, когда функция успешно выполняется в другом файле Py.Мне нужно импортировать main.py в другой файл, но как мне оттуда вызвать навигацию по фреймам?

openf.py

from tkinter import filedialog

def openfiledialog():
    global of
    of = filedialog.askopenfilename(initialdir="/", title="Select file", filetypes=[("archives", "*.zip")])
    openfile())

def openfile():
    with zipfile.ZipFile(of, "r") as f:
    # navigate gui to second page from here

1 Ответ

0 голосов
/ 12 марта 2019

Похоже, что для перехода к одной из ваших страниц нужно вызвать на ней метод show. Поэтому все, что вам нужно, это ссылка на страницу, чтобы перейти к ней.

Я рекомендую создать метод на MainView, который можно использовать для перехода на страницу. Затем вы можете передать символическое имя, и оно будет использовать это имя, чтобы определить, какую страницу показывать.

Например:

class MainView(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
        self.pages = {
            "p1": Page1(self),
            "p2": Page2(self),
        }
        container = tk.Frame(self)
        container.pack(side="top", fill="both", expand=True)
        self.pages["p1"].place(in_=container, x=0, y=0, relwidth=1, relheight=1)
        self.pages["p2"].place(in_=container, x=0, y=0, relwidth=1, relheight=1)
        self.show("p1")

    def show(self, page_name):
        page = self.pages[page_name]
        page.show()

Как только вы это сделаете, вам просто нужно передать main функции, которую вы хотите, чтобы перейти на другую страницу.

Например, начните с передачи main методу openfiledialog другого файла:

...
filemenu.add_command(
    label="Open", 
    command=lambda: openf.openfiledialog(main)
)
...

А затем в openfiledialog используйте эту ссылку, чтобы показать кадр:

def openfiledialog(main):
    ...
    openfile(main)

def openfile(main):
    with zipfile.ZipFile(of, "r") as f:
        main.show("p1")
...