Python 如何在另一个文件中打开tkinter中的多个窗口?

Python 如何在另一个文件中打开tkinter中的多个窗口?,python,python-3.x,user-interface,tkinter,Python,Python 3.x,User Interface,Tkinter,我的python代码有问题(tkinter) 我有两个文件(F1.py)和(F2.py),每个文件都是一个窗口,我还有另一个名为(main.py)的文件,它用两个按钮打开一个窗口,我想每次单击(F1)文件中的一个或(F2)打开。 我该怎么办? 这是我的代码: from tkinter import * main = Tk() def f1(): import f1.py # I do not know what to do to run the file f1.py here !

我的python代码有问题(tkinter) 我有两个文件(F1.py)和(F2.py),每个文件都是一个窗口,我还有另一个名为(main.py)的文件,它用两个按钮打开一个窗口,我想每次单击(F1)文件中的一个或(F2)打开。 我该怎么办? 这是我的代码:

from tkinter import *
main = Tk()
def f1():
    import f1.py
    # I do not know what to do to run the file f1.py here !! 
def f2():
    import f2.py
    # I do not know what to do to run the file f2.py here !! 
btn_f2 = Button(main,text="open f2",command=f2).pack()
btn_f1 = Button(main,text="open f1",command=f1).pack()
mainloop()

以下是根据您的需要进行的工作,因为您希望从主python脚本执行另一个tkinter窗口。下面是实现这一点的方法

在你的主页上.py

from tkinter import *
import os
import sys
import f1,f2
main= Tk()


def open(filename):
    os.chdir("D:\\PYTHON_FILES\\") #change this path to your path where your f1.py and f2.py is located
    # print("current dir "+os.getcwd())
    os.system('python '+filename) #runnning the python command on cmd to execute both windows

btn_f2 = Button(main,text="open f2",command=lambda: open("f1.py")).pack()
btn_f1 = Button(main,text="open f1",command=lambda: open("f2.py")).pack()
main.mainloop()
例如,现在定义f1.py

from tkinter import *
window= Tk()
window.title('f1 Hello Python')
window.geometry("300x200+10+10")
mainloop()
类似地,例如,我们有f2.py

from tkinter import *
window= Tk()
window.title('f2 Hello Python')
window.geometry("300x200+10+10")
mainloop()
现在,如果你想用Tinkter中的TopLevel实现这个目标,那么这里有一个干净完美的方法来实现这个目标

只需制作一个main.py,如下所示

from tkinter import *  

root = Tk()  

root.geometry("200x200")  

#here define your f1 window
def f1():  
    top = Toplevel(root)
    top.geometry("400x400")
    top.title("I am f1 window smaller than f2 but bigger than root")    
    top.mainloop() 

#Similarly here define your f2 window
def f2():  
    top = Toplevel(root)
    top.geometry("500x500")
    top.title("I am f2 window bigger than f1")  
    top.mainloop()
    

btn1 = Button(root, text = "open f1", command = f1)  
btn2 = Button(root, text = "open f2", command = f2)  


btn1.place(x=75,y=50)
btn2.place(x=75,y=20)  


root.mainloop()

以下是根据您的需要进行的工作,因为您希望从主python脚本执行另一个tkinter窗口。下面是实现这一点的方法

在你的主页上.py

from tkinter import *
import os
import sys
import f1,f2
main= Tk()


def open(filename):
    os.chdir("D:\\PYTHON_FILES\\") #change this path to your path where your f1.py and f2.py is located
    # print("current dir "+os.getcwd())
    os.system('python '+filename) #runnning the python command on cmd to execute both windows

btn_f2 = Button(main,text="open f2",command=lambda: open("f1.py")).pack()
btn_f1 = Button(main,text="open f1",command=lambda: open("f2.py")).pack()
main.mainloop()
例如,现在定义f1.py

from tkinter import *
window= Tk()
window.title('f1 Hello Python')
window.geometry("300x200+10+10")
mainloop()
类似地,例如,我们有f2.py

from tkinter import *
window= Tk()
window.title('f2 Hello Python')
window.geometry("300x200+10+10")
mainloop()
现在,如果你想用Tinkter中的TopLevel实现这个目标,那么这里有一个干净完美的方法来实现这个目标

只需制作一个main.py,如下所示

from tkinter import *  

root = Tk()  

root.geometry("200x200")  

#here define your f1 window
def f1():  
    top = Toplevel(root)
    top.geometry("400x400")
    top.title("I am f1 window smaller than f2 but bigger than root")    
    top.mainloop() 

#Similarly here define your f2 window
def f2():  
    top = Toplevel(root)
    top.geometry("500x500")
    top.title("I am f2 window bigger than f1")  
    top.mainloop()
    

btn1 = Button(root, text = "open f1", command = f1)  
btn2 = Button(root, text = "open f2", command = f2)  


btn1.place(x=75,y=50)
btn2.place(x=75,y=20)  


root.mainloop()


说你的文件“是windows”或你想“运行”它们是没有意义的。你需要更清楚地思考这个问题,然后才能解决它。如果您的其他文件包含自己的
mainloop()
调用和其他立即发生的内容,那么您需要重新设计。另外,在
import
语句中不使用
.py
文件扩展名;您命名的是模块,而不是文件。我认为您可能需要后退几步,首先确保您正确理解基本原理。设计一个GUI并不是一件容易的事情。而且,这似乎不是一个运行文件的好方法,因为关闭它们并再次打开可能会很好。例如,如果你按两次按钮和我看到的其他东西,你必须创建一个类(或一个函数,但类可能更容易被预处理),会发生什么然后导入它并从那里启动windows,因此您可以使用TopLevel。关于tkinter的更多信息还可以添加其他文件中的代码吗?这里的关键是让创建窗口的
f1.py
中的所有代码都位于名为
f1
的函数内,与
f2
的函数内。然后您的文件可以从f1导入f1的
和f2导入f2的
开始。说您的文件“是窗口”或您想“运行”它们是没有意义的。你需要更清楚地思考这个问题,然后才能解决它。如果您的其他文件包含自己的
mainloop()
调用和其他立即发生的内容,那么您需要重新设计。另外,在
import
语句中不使用
.py
文件扩展名;您命名的是模块,而不是文件。我认为您可能需要后退几步,首先确保您正确理解基本原理。设计一个GUI并不是一件容易的事情。而且,这似乎不是一个运行文件的好方法,因为关闭它们并再次打开可能会很好。例如,如果你按两次按钮和我看到的其他东西,你必须创建一个类(或一个函数,但类可能更容易被预处理),会发生什么然后导入它并从那里启动windows,因此您可以使用TopLevel。关于tkinter的更多信息还可以添加其他文件中的代码吗?这里的关键是让创建窗口的
f1.py
中的所有代码都位于名为
f1
的函数内,与
f2
的函数内。然后您的文件可以从f1导入f1
和f2导入f2的
开始。感谢这段代码的有效性,但是当我想要一个带有main.py的make exe文件时,这不起作用。看看您是否使用答案中的第一种方法,那么这是不可行的,或者说是处理GUI的合法方法,因为现在你想让你的程序执行,所以从程序的第二种方法是可行的或正确的方式。因此,即使在生成exe之后,第二种方法也可以完美地工作。如果您仍然面临问题,请告诉我。请尝试第二种方法,但我在代码中给出了此错误:image“pyimage5”“不存在”您用于创建exe的模块是什么?我使用pyinstaller模块验证此代码有效,但当我想要一个带有main.py的make exe文件时,此代码无效。请查看您是否使用答案中的第一种方法,然后这是不可行的,或者说这是处理GUI的合法方法,因为现在你想让你的程序执行,所以从程序的第二种方法是可行的或正确的方式。因此,即使在生成exe之后,第二种方法也可以完美地工作。如果您仍然面临问题,请告诉我。请尝试第二种方法,但我从代码中给出了此错误:图像“pyimage5”不存在“您用于创建exe的模块是什么?我使用pyinstaller模块