【发布时间】:2020-06-28 08:07:23
【问题描述】:
我有一个带有frame 和menu 的主程序窗口,用于调用计算模块。
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()
我想在程序启动时看到一个类似于this 的窗口。然后,当您单击其中一个菜单按钮(例如,键连接)时,框架应更新并显示新模块的图形界面。点击后窗口应该看起来像this。
问题是在显示新模块的图形部分时,旧模块的图形部分没有被擦除,他们overlap each other。如何让程序删除旧模块的图形部分? grid_remove() 和 reload() 函数没有帮助。
我在运行程序时想要得到什么的附加说明。
- 程序启动。
- 主窗口出现,计算模块已经运行,默认安装。在这种情况下,“螺栓连接”。窗口现在应该看起来像 this。
- 用户从菜单中选择一个计算模块。在这种情况下,“键连接”。前一个模块的图形部分被擦除,并显示新模块。窗口现在应该看起来像 this。
UPD
为了更好地理解问题,请添加指向项目文件所在的 google drive 的链接。 https://drive.google.com/drive/folders/110OrRqlfzGmswg8cGHO3-C4VxfRj1sos?usp=sharing
在这个文件夹中有两个txt文件,里面有导出模块的代码,这样你就不用把工程下载到电脑上运行了。
【问题讨论】:
-
部分问题可能是几何管理器的使用。你知道柱跨度吗?那么可能是图片的大小。您可能需要实现一个元素,它使图片的大小相等,或者您使用 PIL 调整它们的大小。如果我们看不到完整的代码并让我们猜测,就很难找出问题所在。也许你会更新你的问题。
-
在 Frame 或窗口中,您只能使用 pack() 或 grid()。你们混合经理吗?
-
不是。我只使用
grid。提交所有代码不允许限制问题中的字符数。我会尝试将项目上传到网站。 -
我想我误解了你想要做什么。我想如果你想展示它们,你会做同样大小的模块并将它们抬起来吗?不是吗?
-
对。我想在主窗口中专门为它们设计的框架中显示这些模块。