Ich lerne gerade Python und ich versuche, eine tkinter-Taste zu erhalten, um Variablen aus mehreren Eingabefeldern an eine Funktion in einer anderen Datei zu übergeben. Die Schaltfläche ruft die Scan-Funktion in einem anderen Modul auf.python tkinter button command führt Befehl beim Ausführen aus und nicht beim Drücken der Taste
Aus irgendeinem Grund wird die Funktion ausgeführt, sobald ich starte und nicht auf den Button klicken. Ich verstehe nicht warum. Finden Taste unter # Scannen starten Taste ich für Ihre Unterstützung bin der Hoffnung,
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()
Die Scan-Funktion in dieser Taste ist in der 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()
hilft, die gearbeitet, dank – veritaS
Im froh, es hat funktioniert! – cahg88