2017-07-18 96 views
-1

我目前正在學習python,我試圖讓一個tkinter按鈕將變量從幾個輸入字段傳遞給另一個文件中的函數。 該按鈕調用另一個模塊內的掃描功能。蟒蛇tkinter按鈕命令執行時執行命令,而不是按下按鈕

由於某種原因,只要我開始,而不是點擊按鈕,該功能就會得到執行。我不明白爲什麼。 查找按鈕下#開始掃描按鈕 我希望對我們的支持

from tkinter import * 
from PIL import Image, ImageTk 
from Sockets_Portscanner_threaded import * 


# Here, we are creating our class, Window, and inheriting from the Frame 


# class. Frame is a class from the tkinter module. (see Lib/tkinter/__init__) 
class Window(Frame): 


    # Define settings upon initialization. Here you can specify 
    def __init__(self, master=None): 


     # parameters that you want to send through the Frame class. 
     Frame.__init__(self, master) 

     #reference to the master widget, which is the tk window     
     self.master = master 

     #with that, we want to then run init_window, which doesn't yet exist 
     self.init_window() 

    #Creation of init_window 
    def init_window(self): 

     # changing the title of our master widget  
     self.master.title("GUI") 

     # allowing the widget to take the full space of the root window 
     self.pack(fill=BOTH, expand=1) 


     #################### 
     #  FORM  # 
     #################### 

     #Grid labels 
     Label(self, text="Please enter the Parameters For portscanning!").grid(row=0, column=1) 
     Label(self, text="Server/domain").grid(row=2) 
     Label(self, text="Ports:").grid(row=4, column=0) 
     Label(self, text="From").grid(row=5) 
     Label(self, text="To").grid(row=6) 

     # creating a entry forms 
     E1 = Entry(self) 
     E2 = Entry(self) 
     E3 = Entry(self) 

     # placing entry forms in grid 
     E1.grid(row=2, column=1) 
     E2.grid(row=5, column=1) 
     E3.grid(row=6, column=1) 

     # Setting defaul variables for entry 
     E1.insert(10,'localhost') 
     E2.insert(10,'1') 
     E3.insert(10,'500') 
     #################### 
     #  \FORM  # 
     #################### 

     # Start Scanning button 
     Button(self, text='Show', command=scan(E1.get(),E2.get(),E3.get())).grid(row=7, column=1, sticky=W, pady=4) 


    def client_exit(self): 
     exit() 



# root window created. Here, that would be the only window, but 
# you can later have windows within windows. 
root = Tk() 

root.geometry("400x300") 

#creation of an instance 
app = Window(root) 


#mainloop 
root.mainloop() 

此鍵掃描功能是在Sockets_portscanner_threaded文件

import socket 
import threading 
from queue import Queue 

print_lock = threading.Lock() 

#target = input('IP or domain of server to be scanned?') 
#fromPort = input('From Port?') 
#toPort = input('To port?') 
portlist = [] 


def portscan(port): 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    try: 
     con = s.connect((target,port)) 
     with print_lock: 
      print('port',port,'is open!') 
      portlist.append(port) 
      print(portlist) 
     con.close() 
    except: 
     pass 
def threader(): 
    while True: 
     worker = q.get() 
     portscan(worker) 
     q.task_done() 


q = Queue() 
def scan(target,fromPort,toPort): 
    print('SCAN() execute') 
    for x in range(100): 
     t = threading.Thread(target=threader) 
     t.daemon = True 
     t.start() 

    for worker in range(int(fromPort),int(toPort)): 
     q.put(worker) 

    q.join() 

回答