2016-04-22 3 views
0

In dieser MainFrame-Klasse habe ich 4 Schaltflächen, die beim Klicken jeweils eine Klasse in ein neues Fenster importieren (außer Update). Ich kann einmal auf jeden der Knöpfe klicken, aber wenn ich jemals versuche, auf einen Knopf ein zweites Mal zu klicken, wird kein neues Fenster auftauchen und nichts wird passieren. Warum funktioniert jede Taste nur einmal?Tkinter-Tasten funktionieren nur einmal

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() 

Antwort

1

Da Module nur einmal importiert werden: Wenn das Modul importiert wurde, verweist Python darauf und importiert es nicht erneut.

Es schlechte Praxis ist, tun so nicht, aber wenn Sie ein Re-Import erzwingen möchten, können Sie wie folgt tun:

import importlib 

importlib.reload(module_name) # attention: the module must have been 
           #   imported first for this to work 

Ich verstehe nicht, warum Sie wollen sehen, Import (und Re-Import) von Modulen auf Knopfdruck.

0

Was Sie tatsächlich tun möchten, ist wiederholt Code in jedem Modul ausführen. AS RB erklärte, das wiederholte Importieren eines Moduls macht das nicht. Was Sie tun sollten, sind definierte Funktionen und Klassen in dem Modul, die Sie nach dem Import aufrufen können. Wenn nichts anderes, packen Sie alles in eine Funktion namens main und verwenden Sie zum Beispiel command=Add.main, wenn Sie die Schaltfläche Hinzufügen definieren. (Zuerst setzen Sie import Add an der Spitze des Programms.)

Testen eines Moduls ist viel einfacher beim Importieren es definiert nur Objekte und bindet dann an Namen, ohne Nebenwirkungen wie lang laufende Berechnungen und Öffnen von Fenstern.