防止循环导入示例

时间:2018-04-20 13:15:19

标签: python python-3.x import

假设我有两个python文件。两者都带有GUI。首先是" Main"第二个是"计算器"。从Main我将开始计算器。所以我必须导入计算器。在计算器中我将进行计算。让我轻松说1 + 1 = 2。现在我想"发送"此结果为Main中的文本。

如果没有循环导入,我该怎么做?我找不到一个好的教程/示例!

到目前为止我的代码:

主:

from tkinter import *

import Test_2

window = Tk() 
window.title("First Window")

def start():
    Test_2.start_second()

Input1 = Entry(window)
Input1.grid(row=0,column=0, padx=10, pady=5)

Start = Button(window,text="Start", command=start)
Start.grid(row=1,column=0, padx=10, pady=5)

window.mainloop()

第二

from tkinter import *


def start_second():
    window2 = Tk() 
    window2.title("Second Window")

    def send():
        x = Input.get()


    Input2 = Entry(window2)
    Input2.grid(row=0,column=0, padx=10, pady=5)

    Send = Button(window2,text="Send", command=send)
    Send.grid(row=1,column=0, padx=10, pady=5)


    window2.mainloop()

1 个答案:

答案 0 :(得分:1)

此代码完全符合您的要求(与我在评论中建议的相反;但无论如何,您要么从模块函数中获取值,要么发送引用以进行更改)

我试着按照你的结构。

基本上是将父窗口和第一个条目作为参数发送到第二个窗口创建功能。不要两次调用mainloop,最后一次调用mainloop,并在主Toplevel之后的所有其他窗口使用Tk。这并不是说我喜欢使用内部函数和lambda以获得可读性,但是每次你想要将参数发送到命令回调时,在tkinter中都需要lambdas,否则它将被正确调用在命令定义中。

tkinter_w1.py (your main.py)

from tkinter import Tk, ttk
import tkinter as tk

from tkinter_w2 import open_window_2

root = Tk()

entry1 = ttk.Entry(root)
button1 = ttk.Button(root, text='Open Window 2',
    command=lambda parent=root, entry=entry1:open_window_2(parent, entry))

entry1.pack()
button1.pack()
root.mainloop()

tkinter_w2.py (your Test_2.py)

from tkinter import Tk, ttk, Toplevel
import tkinter as tk

def open_window_2(parent, entry):

    def send():
        entry.delete(0,tk.END)
        entry.insert(0,entry2.get())

    window2 = Toplevel(parent)
    entry2 = ttk.Entry(window2)
    button2 = ttk.Button(window2, text='Send', command=send)
    entry2.pack()
    button2.pack()