【发布时间】:2022-10-19 23:54:16
【问题描述】:
我正在制作一个 GUI 应用程序,我遇到的问题是我不知道如何访问由 .accept() 创建的对象,我看过很多教程,但它们都喜欢控制台应用程序,所以我需要创建在某些套接字对象中,我使用按钮打开连接,其他进程发送数据
from email import message
from fileinput import filename
from operator import truediv
import sys
from tkinter.tix import Tree
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QMainWindow
import tkinter
import tkinter.filedialog
import socket
import threading as th
from time import sleep
from tkinter import messagebox
from GUI import Ui_MainWindow, Ui_MainWindow
from tkinter import filedialog
from tkinter import *
TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024
MESSAGE = "Hello, World!"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def Stream():
while True:
while main_win.Transmit:
f = open(main_win.filename, "r")
x = len(f.readlines())
while x>=main_win.Lastline:
data=(f.readline(main_win.Lastline+1))
main_win.Lastline=main_win.Lastline+1
conn.send(data) #out of scope
f.close()
sleep(main_win.ui.doubleSpinBox.value())
T = th.Timer(0.10, Stream,args=(''))
class MainWindow:
Transmit = False
Lastline=0
filename=""
Started=False
Connected=False
def __init__(self):
self.main_win = QMainWindow()
self.ui = Ui_MainWindow()
self.ui.setupUi(self.main_win)
self.ui.pushButton.clicked.connect(self.on_pushButton_clicked)
self.ui.pushButton_2.clicked.connect(self.transmit_clicked)
self.ui.pushButton_4.clicked.connect(self.OpenConn)
def show(self):
self.main_win.show()
def on_pushButton_clicked(self):
filename = filedialog.askopenfilename(
initialdir="/", title="Select file", filetypes=(("txt files", "*.txt"), ("all files", "*.*")))
print(filename)
self.ui.lineEdit.setText(filename)
def transmit_clicked(self):
if not self.Connected:
messagebox.showerror('Error', 'Error: No hay una conexion establecida')
return
if self.filename == "":
messagebox.showerror('Error', 'Error: No ha seleccionado el archivo')
return
if (not self.Transmit):
self.Transmit = True
self.ui.pushButton_2.setText("Detener Streaming de datos")
# iniciar transmicion de datos
print(T.interval)
if (not self.Started):
T.start()
self.Started=True
else:
self.Transmit = False
self.ui.pushButton_2.setText("Iniciar Streaming de datos")
def OpenConn(self):
conn, addr = s.accept()
self.Connected=True
if __name__ == '__main__':
app = QApplication(sys.argv)
main_win = MainWindow()
main_win.show()
import socket
TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
#s.setblocking(0)
#conn, addr = s.accept()
sys.exit(app.exec_())
【问题讨论】: