按钮在 PySimpleGUI 中不执行任何操作

问题描述 投票:0回答:2

我今天做了一个端口扫描仪,GUI 目前还很粗糙,但是在测试它时我注意到,当按“扫描端口”时它什么也不做。我在我的代码中找不到任何明显的东西。我错过了什么?

import socket
import PySimpleGUI as sg

def scan_ports(target_ip, start_port, end_port):
    print(f"Scanning ports on {target_ip}...")
    for port in range(start_port, end_port + 1):
        try:
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            socket.setdefaulttimeout(1)
            result = sock.connect_ex((target_ip, port))
            if result == 0:
                print(f"Port {port} is open")
            sock.close()
        except KeyboardInterrupt:
            print("Scan interrupted by user.")
            break
        except socket.error:
            print("Couldn't connect to server.")
            break


def port_scan_window():
    layoutport = [
        [sg.Text("            IP:          Starting port:     Ending port:")],
        [sg.Button("Scan ports", key="-SCAN-"), sg.Input(key="-PORTIP-"), sg.Input(key="-START-"), sg.Input(key="-END-")],
        [sg.Output(size=(30,20))],
        [sg.Button("Exit")]
    ]

    port_window = sg.Window('Port scanner', layoutport)

    while True:
        event, values = port_window.Read()
        if event in (None, "Scan ports"):
            print("Scanning " + values["-PORTIP-"] + " for Open ports")
            scan_ports(target_ip=values["-PORTIP-"], start_port=values["-START-"], end_port=values["-END-"])
        elif event in (None, "Exit"):
            break
    
    port_window.Close()

port_scan_window()
python sockets user-interface port pysimplegui
2个回答
0
投票

event
是您在
-SCAN-
中定义的
sg.Button("Scan ports", key="-SCAN-")

所以这应该有效:

if event in (None, "-SCAN-"):

如果您没有使用

Scan ports
,该事件将会是
key
:

sg.Button("Scan ports")

或者如果您已将

key
设置为
'Scan ports'
:

sg.Button("Scan ports", key='Scan ports')

另外,关闭窗口时

event
None
。因此,当按下
scan_ports
按钮时,您正在呼叫
X

您可能想使用:

if event == "-SCAN-":

 if event == "Scan ports":

相反。


0
投票

您可以尝试替换以下行

if event in (None, "Scan ports"):

if event == "-SCAN-":
© www.soinside.com 2019 - 2024. All rights reserved.