在这个MainFrame类中,我有4个按钮,每个按钮在单击时在新窗口中导入一个类(Update除外)。我可以单击每个按钮一次,但是如果我尝试再次单击某个按钮,则不会弹出任何新窗口,也不会发生任何事情。为什么每个按钮只能工作一次?
from tkinter import *
import tkinter.messagebox as tm
import Users
import re
import sqlite3
db = sqlite3.connect('game nebula.db')
c = db.cursor()
class MainFrame(Frame):
def __init__(self, master):
Frame.__init__(self, master)
self.master = master
self.mainUI()
def mainUI(self):
self.master.title("Games Nebula")
self.pack(fill=BOTH, expand=True)
frame1 = Frame(self)
frame1.pack(fill=X)
frame2 = Frame(self)
frame2.pack(fill=X)
frame3 = Frame(self)
frame3.pack(fill=X)
self.label_1 = Label(frame1, text="Welcome to Games Nebula!", fg='green', relief='groove', width='40')
self.label_1.pack(side=TOP, padx=5, pady=5)
self.searchbtn = Button(frame2, text="Browse Games", fg='green', command = self._search_btn_clicked)
self.searchbtn.pack(side=LEFT, padx=25, pady=10)
self.addbtn = Button(frame2, text="Add games", fg='green', command=self._addbtn_btn_clicked)
self.addbtn.pack(side=RIGHT, padx=25, pady=10)
self.updatebtn = Button(frame3, text="Update", fg='green', command=self._update_btn_clicked)
self.updatebtn.pack(side=LEFT, padx=40, pady=10)
self.deletebtn = Button(frame3, text="Delete Games", fg='green', command=self._delete_btn_clicked)
self.deletebtn.pack(side=RIGHT, padx=25, pady=10)
def _search_btn_clicked(self):
print("Searching")
import GameSearch
def _addbtn_btn_clicked(self):
import Add
def _update_btn_clicked(self):
print("Updating")
def _delete_btn_clicked(self):
import Delete
root = Tk()
root.geometry("300x200+300+300")
lf = MainFrame(root)
root.mainloop()
答案 0 :(得分:1)
因为模块只导入一次:导入模块后,python会引用它而不再导入它。
这是不好的做法,所以不要这样做,但是如果你想强制重新导入,你可以这样做:
import importlib
importlib.reload(module_name) # attention: the module must have been
# imported first for this to work
单击按钮,我无法确定您想要导入(和重新导入)模块的原因。
答案 1 :(得分:0)
您实际想要做的是在每个模块中重复运行一些代码。 AS RB解释说,反复导入模块不会那样做。您应该做的是在导入后可以调用的模块中定义的函数和类。如果没有其他内容,请在定义“添加”按钮时将所有内容包装在名为main的函数中并使用,例如command=Add.main
。 (首先将import Add
放在程序的顶部。)
在导入模块时,只需定义对象并将其绑定到名称,就可以轻松测试模块,而不会产生像长时间运行的计算和打开窗口这样的副作用。