【发布时间】:2020-08-05 12:34:11
【问题描述】:
我在一个名为 views1.py 的模块中有一个菜单栏,我正在使用 OOP 将它导入到主模块中。我没有收到错误消息,也没有菜单栏。该窗口会正常打开并加载其他内容。该应用程序正在作为一个包开发,目录结构如下:
主目录有两个文件 main.py 和 README.rst 和一个名为 lowercase 的目录。这个目录小写主要包含views1.py、controller.py和model.py。
1. Main directory
- main.py
- README.rst
- main directory
* views1.py
* model.py
* controller.py
main.py
> from tkinter import Tk
import tkinter as tk
import controller
import views1
from tkinter import *
from views1 import Views1, Views2
class AIcvmaker(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.Views2 = views1.Views2(tk)
self.title("Cleopatra CV Maker")
self.geometry("1400x800")
#Add a view
Views2(self)
Views1(self).grid(sticky = (tk.E))
self.columnconfigure(0, weight=1)
root = AIcvmaker()
root.mainloop()
views1.py
> from tkinter import Tk
import tkinter as tk
from tkinter import *
from tkinter import messagebox
import controller
#code edited for Views1()
class Views1(tk.Frame):
def __init__(self, parent, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
self.controller = controller
self.parent = parent
self.cv_maker_Base()
def cv_maker_Base(self):
self.create_Rightframe()
def create_Rightframe(self):
self.pad_label = ttk.Label(self, text = "Push a button")
self.activate_Button = ttk.Button(self, text = "Activate software")
self.pad_label.grid(row=0, column=1, padx = 8, pady = 8)
self.activate_Button.grid(row=1, column=1, padx = 8, pady = 8)
self.columnconfigure(1, weight = 1)
#ADDING AN EXTRA self to super()
class Views2(tk.Menu):
def __init__(self, parent):
super().__init__(self, parent)
self.parent = parent
self.create_Topmenu()
def create_Topmenu(self):
self.menu_bar = Menu(self.parent)
self.create_Filemenu()
self.create_Editmenu()
self.create_Viewmenu()
self.create_Aboutmenu()
def create_Filemenu(self):
self.filemenu = Menu(self.menu_bar, tearoff = 0)
self.filemenu.add_command(label="New", command = lambda: fNew())
self.filemenu.add_command(label="Open", command= lambda: fOpen())
self.filemenu.add_separator()
self.filemenu.add_command(label="Save", command= lambda: fSave())
self.filemenu.add_command(label="Exit", command=quit)
self.menu_bar.add_cascade(label="File", menu=self.filemenu)
def create_Editmenu(self):
pass
def create_Viewmenu(self):
pass
def create_Aboutmenu(self):
pass
def fNew(self):
pass
def fOpen(self):
pass
def fSave(self):
pass
我尝试在 Views2() 的 init 方法中编写 tk.Menu 并尝试将 self 更改为 parent,它似乎不起作用。我正在编写一个 MVC,因为代码非常长,这将有助于降低复杂性。
【问题讨论】:
-
您能给我们提供一个最小工作代码stackoverflow.com/help/minimal-reproducible-example吗?除了我们没有
controller.py之外,您使用的是Views1,这在您的views1.py上没有定义。 -
顺便说一句,如果之后您使用
from views1 import Views1, Views2,则不需要import views1。您正在导入两次... -
我知道我不应该放完整的代码,controller.py 对输出没有影响,我可以更新 Views1()
-
此外,我尝试将 Views2(self) 行放在 main.py 中的 Views1(self) 上,然后它不显示任何输出。会不会是亲子问题?
-
@David Duran 谢谢
标签: python tkinter module tkinter-menu