Python 将图形界面层叠在一起
我有一个主程序窗口,带有和,用于调用计算模块Python 将图形界面层叠在一起,python,tkinter,graphics,Python,Tkinter,Graphics,我有一个主程序窗口,带有和,用于调用计算模块 from tkinter import Menu, Label, Tk, Frame, Scrollbar, Canvas, N, E, S import runpy import Bolt_connection from importlib import reload # Program window dimensions root = Tk() root.title("Name") root.geometry("1
from tkinter import Menu, Label, Tk, Frame, Scrollbar, Canvas, N, E, S
import runpy
import Bolt_connection
from importlib import reload
# Program window dimensions
root = Tk()
root.title("Name")
root.geometry("1260x700")
root.update()
MaxX = root.winfo_width()
MaxY = root.winfo_height()
canvas = Canvas(root, width=MaxX, height=MaxY, bg="white")
scroll_y = Scrollbar(root, orient="vertical", command=canvas.yview)
frame = Frame(canvas)
for i in range(50):
Label(frame).grid()
i += 1
canvas.create_window(0, 0, anchor='nw', window=frame)
canvas.update_idletasks()
canvas.configure(scrollregion=canvas.bbox('all'),
yscrollcommand=scroll_y.set)
canvas.grid()
scroll_y.grid(row=0, sticky=E + N + S)
main_menu = Menu()
# Submenu for Export to...
file_menu = Menu(tearoff=0)
help_menu = Menu(file_menu, tearoff=0)
help_menu_export_to = Menu(help_menu, tearoff=0)
help_menu_export_to.add_command(label="Excel")
help_menu_export_to.add_command(label="Word")
def start_bolt_connection():
import Bolt_connection
def start_key_connection():
import Key_connection
# Submenu for Part calculation selection
calculation_selection_menu = Menu(tearoff=0)
help_menu2 = Menu(calculation_selection_menu, tearoff=0)
help_menu2_part_calculation_selection = Menu(help_menu2, tearoff=0)
B2 = help_menu2_part_calculation_selection.add_command(label="Bolted (screw) connection", command=start_bolt_connection)
help_menu2_part_calculation_selection.add_command(label="Key connection", command=start_key_connection)
help_menu2_part_calculation_selection.add_command(label="Pinned connection")
# File menu
file_menu.add_command(label="New")
file_menu.add_command(label="Save")
file_menu.add_cascade(label="Export to...", menu=help_menu_export_to)
file_menu.add_command(label="Open")
file_menu.add_command(label="Exit")
# Main menu
main_menu.add_cascade(label="File", menu=file_menu)
main_menu.add_cascade(label="About")
main_menu.add_cascade(label="Help")
main_menu.add_cascade(label="Part calculation selection", menu=help_menu2_part_calculation_selection)
runpy.run_module('Bolt_connection')
root.config(menu=main_menu)
root.mainloop()
我想看到一个程序启动时的窗口。然后,当您单击其中一个菜单按钮(例如,键连接)时,框架应更新并显示新模块的图形界面。单击后,窗口应该是这样的
问题在于,当显示新模块的图形部分时,旧模块的图形部分不会被擦除,并且会被删除。如何使程序删除旧模块的图形部分?grid\u remove()
和reload()
函数没有帮助。
关于我运行程序时想要得到什么的附加说明。
此文件夹中有两个txt文件,其中包含导出模块的代码,因此您无需将项目下载到计算机并运行它。main.py
import tkinter as tk
import Mod1
import Mod2
root = tk.Tk()
m1 = Mod1.Model(root)
m2 = Mod2.Model(root)
m1.grid(column= 0, row=0)
m2.grid(column = 0 ,row=0)
def callback():
m1.lift()
b = tk.Button(text='click me', command=callback)
b.grid(column=0,row=1)
from __main__ import tk
class Model(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.master = master
self.configure(bg="red", width=300, height=300)
from __main__ import tk
class Model(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.master = master
self.configure(bg="blue", width=300, height=300)
Mod1.py
import tkinter as tk
import Mod1
import Mod2
root = tk.Tk()
m1 = Mod1.Model(root)
m2 = Mod2.Model(root)
m1.grid(column= 0, row=0)
m2.grid(column = 0 ,row=0)
def callback():
m1.lift()
b = tk.Button(text='click me', command=callback)
b.grid(column=0,row=1)
from __main__ import tk
class Model(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.master = master
self.configure(bg="red", width=300, height=300)
from __main__ import tk
class Model(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.master = master
self.configure(bg="blue", width=300, height=300)
Mod2.py
import tkinter as tk
import Mod1
import Mod2
root = tk.Tk()
m1 = Mod1.Model(root)
m2 = Mod2.Model(root)
m1.grid(column= 0, row=0)
m2.grid(column = 0 ,row=0)
def callback():
m1.lift()
b = tk.Button(text='click me', command=callback)
b.grid(column=0,row=1)
from __main__ import tk
class Model(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.master = master
self.configure(bg="red", width=300, height=300)
from __main__ import tk
class Model(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.master = master
self.configure(bg="blue", width=300, height=300)
解释
在模块中,您将模型定义为tk.Frame的子类,这使您能够像处理tk.Frame一样处理模型。部分问题可能是使用几何体管理器。你知道columnspan的事吗?那么可能是照片的大小。您可能需要实现使图片大小相等的元素,或者使用PIL调整图片大小。如果我们看不到完整的代码并让我们猜测,就很难找出问题所在。也许您将更新您的问题。在框架或窗口中,您只能使用pack()或grid()。你和经理混在一起吗?不是。我只使用
网格
。提交所有代码不允许限制问题中的字符数。我将尝试将项目上传到该网站。我想我误解了你的意图。我想你会做同样大小的模块,如果你想展示它们,你会把它们举起来吗?是吗?对。我想在主窗口中用专门为它们设计的框架显示这些模块。非常感谢!稍后我将尝试在代码中使用它。为了以防万一,我在问题的描述中添加了一个指向Google驱动器的链接,其中包含项目文件夹。欢迎您。但是,一旦我的答案解决了你的问题,请立即投票并接受我的答案。:)你的代码不能完全满足我的需要。代码首先创建一个对象m1,然后创建m2。也就是说,m1小于m2。按下按钮时,对象m1上升到对象m2上方。如果只有两个或三个对象,那么这不是问题。但如果有10个,那么它将获得大量资源。我希望当按下按钮时,旧对象从帧中移除(擦除),并绘制新对象。@Nemo现在您的模型类似于tk.Frames,您可以使用widget.destroy()或您想要的。你呢?这只是一个例子,但我可以把它添加到答案中。