- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'chatbox.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore,QtGui,QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import*
import sys, socket
from threading import *
import _thread
def app_version():
msg_box("Application Version", "Test 0.1")
def msg_box(title, data):
w = QWidget()
QMessageBox.information(w, title, data)
def update_list(self, data):
self.listWidget.addItem(data)
print ("\a")
def server_socket(self):
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 10420))
s.listen(1)
except socket.error:
msg_box("Socket Error !!",
"Unable To Setup Local Socket. Port In Use")
return
while 1:
conn, addr = s.accept()
incoming_ip = str(addr[0])
current_chat_ip = self.lineEdit.text()
if incoming_ip != current_chat_ip:
conn.close()
else:
data = conn.recv(4096)
update_list(self, data)
conn.close()
s.close()
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
self.start_server()
MainWindow.setObjectName("MainWindow")
MainWindow.resize(860, 646)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.frame = QtWidgets.QFrame(self.centralwidget)
self.frame.setGeometry(QtCore.QRect(80, 50, 671, 31))
self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame.setObjectName("frame")
self.lineEdit = QtWidgets.QLineEdit(self.frame)
self.lineEdit.setGeometry(QtCore.QRect(70, 0, 331, 22))
self.lineEdit.setObjectName("lineEdit")
self.label = QtWidgets.QLabel(self.frame)
self.label.setGeometry(QtCore.QRect(10, 0, 61, 21))
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.frame)
self.label_2.setGeometry(QtCore.QRect(440, 0, 55, 21))
self.label_2.setObjectName("label_2")
self.lineEdit_2 = QtWidgets.QLineEdit(self.frame)
self.lineEdit_2.setGeometry(QtCore.QRect(490, 0, 171, 22))
self.lineEdit_2.setObjectName("lineEdit_2")
self.frame_2 = QtWidgets.QFrame(self.centralwidget)
self.frame_2.setGeometry(QtCore.QRect(80, 90, 401, 411))
self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_2.setObjectName("frame_2")
self.textEdit = QtWidgets.QTextEdit(self.frame_2)
self.textEdit.setGeometry(QtCore.QRect(10, 10, 381, 361))
self.textEdit.setObjectName("textEdit")
self.pushButton_3 = QtWidgets.QPushButton(self.frame_2)
self.pushButton_3.setGeometry(QtCore.QRect(20, 380, 151, 28))
self.pushButton_3.setObjectName("pushButton_3")
#############################################################
# Executes When The Send Message Button Is Clicked
self.pushButton_3.clicked.connect(self.client_send_message)
############################################################
self.pushButton_4 = QtWidgets.QPushButton(self.frame_2)
self.pushButton_4.setGeometry(QtCore.QRect(230, 380, 151, 28))
self.pushButton_4.setObjectName("pushButton_4")
#############################################################
# Executes When The Clear Logs Button Is Clicked
self.pushButton_4.clicked.connect(self.clear_logs)
##############################################################
self.frame_3 = QtWidgets.QFrame(self.centralwidget)
self.frame_3.setGeometry(QtCore.QRect(490, 80, 261, 421))
self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_3.setObjectName("frame_3")
self.listWidget = QtWidgets.QListWidget(self.frame_3)
self.listWidget.setGeometry(QtCore.QRect(10, 10, 241, 401))
self.listWidget.setObjectName("listWidget")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 860, 26))
self.menubar.setObjectName("menubar")
self.menuMenu_Action = QtWidgets.QMenu(self.menubar)
self.menuMenu_Action.setObjectName("menuMenu_Action")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.actionVersion = QtWidgets.QAction(MainWindow)
self.actionVersion.setObjectName("actionVersion")
#######################################################
# Executes When The SubMenu Item Version Is Clicked
self.actionVersion.triggered.connect(app_version)
#######################################################
self.actionExit = QtWidgets.QAction(MainWindow)
self.actionExit.setObjectName("actionExit")
#######################################################
# Executes When The SubMenu Item Exit Is Clicked
self.actionExit.triggered.connect(qApp.quit)
#######################################################
self.menuMenu_Action.addAction(self.actionVersion)
self.menuMenu_Action.addAction(self.actionExit)
self.menubar.addAction(self.menuMenu_Action.menuAction())
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def clear_logs(self):
self.listWidget.clear()
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "IP address"))
self.label_2.setText(_translate("MainWindow", "Name"))
self.pushButton_3.setText(_translate("MainWindow", "Send"))
self.pushButton_4.setText(_translate("MainWindow", "Clear logs"))
self.menuMenu_Action.setTitle(_translate("MainWindow", "Menu Action"))
self.actionVersion.setText(_translate("MainWindow", "Version"))
self.actionExit.setText(_translate("MainWindow", "Exit"))
def start_server(self):
Thread(target=server_socket, args=(self,)).start()
msg_box("Success", "Server Started Sucessfully")
def client_send_message(self):
ip_address = self.lineEdit.text()
nick = self.lineEdit_2.text()
nick = nick.replace("#>","")
rmessage = self.textEdit.toPlainText()
rmessage = rmessage.replace("#>","")
rmsg = nick + " #> " + rmessage
c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
c.connect((ip_address, 10420))
except Exception:
msg_box("Connection Refused", "The Address You Are Trying To Reach Is Currently Unavailable")
return
try:
c.send(rmsg)
self.listWidget.addItem(rmsg)
self.textEdit.setText("")
except Exception:
msg_box("Connection Refused", "The Message Cannot Be Sent. End-Point Not Connected !!")
c.close()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
我尝试基于 https://null-byte.wonderhowto.com/how-to/sploit-build-peer-peer-chat-application-python-gui-linux-0163617/ 制作聊天应用程序
并出现错误
Exception in thread Thread-1: Traceback (most recent call last):
File "D:\Program Files\python 3.7\lib\threading.py", line 917, in_bootstrap_inner
self.run()
File "D:\Program Files\python 3.7\lib\threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "chatbox.py", line 47, in server_socket
update_list(self, data)
File "chatbox.py", line 24, in update_list
self.listWidget.addItem(data)
TypeError: arguments did not match any overloaded call:
addItem(self, QListWidgetItem): argument 1 has unexpected type 'bytes'
addItem(self, str): argument 1 has unexpected type 'bytes'
刚开始写代码,如有错误请谅解
最佳答案
通过recv()
接收到的是字节,但QListWidget
需要字符串,因此解决方案是使用decode()
对其进行转换。
但是你的代码还有另一个隐藏的错误(在我看来,教程的作者对GUI知之甚少,所以我建议寻找另一个教程),GUI不能从另一个线程更新,这是Qt禁止的,因此解决方案是使用信号,或者在本例中使用 @pyqtSlot()
和 QMetaObject::invokeMethod()
。
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'chatbox.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore,QtGui,QtWidgets
import sys
import socket
import threading
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(860, 646)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.frame = QtWidgets.QFrame(self.centralwidget)
self.frame.setGeometry(QtCore.QRect(80, 50, 671, 31))
self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame.setObjectName("frame")
self.lineEdit = QtWidgets.QLineEdit(self.frame)
self.lineEdit.setGeometry(QtCore.QRect(70, 0, 331, 22))
self.lineEdit.setObjectName("lineEdit")
self.label = QtWidgets.QLabel(self.frame)
self.label.setGeometry(QtCore.QRect(10, 0, 61, 21))
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.frame)
self.label_2.setGeometry(QtCore.QRect(440, 0, 55, 21))
self.label_2.setObjectName("label_2")
self.lineEdit_2 = QtWidgets.QLineEdit(self.frame)
self.lineEdit_2.setGeometry(QtCore.QRect(490, 0, 171, 22))
self.lineEdit_2.setObjectName("lineEdit_2")
self.frame_2 = QtWidgets.QFrame(self.centralwidget)
self.frame_2.setGeometry(QtCore.QRect(80, 90, 401, 411))
self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_2.setObjectName("frame_2")
self.textEdit = QtWidgets.QTextEdit(self.frame_2)
self.textEdit.setGeometry(QtCore.QRect(10, 10, 381, 361))
self.textEdit.setObjectName("textEdit")
self.pushButton_3 = QtWidgets.QPushButton(self.frame_2)
self.pushButton_3.setGeometry(QtCore.QRect(20, 380, 151, 28))
self.pushButton_3.setObjectName("pushButton_3")
#############################################################
# Executes When The Send Message Button Is Clicked
self.pushButton_3.clicked.connect(self.client_send_message)
############################################################
self.pushButton_4 = QtWidgets.QPushButton(self.frame_2)
self.pushButton_4.setGeometry(QtCore.QRect(230, 380, 151, 28))
self.pushButton_4.setObjectName("pushButton_4")
#############################################################
# Executes When The Clear Logs Button Is Clicked
self.pushButton_4.clicked.connect(self.clear_logs)
##############################################################
self.frame_3 = QtWidgets.QFrame(self.centralwidget)
self.frame_3.setGeometry(QtCore.QRect(490, 80, 261, 421))
self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_3.setObjectName("frame_3")
self.listWidget = QtWidgets.QListWidget(self.frame_3)
self.listWidget.setGeometry(QtCore.QRect(10, 10, 241, 401))
self.listWidget.setObjectName("listWidget")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 860, 26))
self.menubar.setObjectName("menubar")
self.menuMenu_Action = QtWidgets.QMenu(self.menubar)
self.menuMenu_Action.setObjectName("menuMenu_Action")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.actionVersion = QtWidgets.QAction(MainWindow)
self.actionVersion.setObjectName("actionVersion")
self.actionExit = QtWidgets.QAction(MainWindow)
self.actionExit.setObjectName("actionExit")
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "IP address"))
self.label_2.setText(_translate("MainWindow", "Name"))
self.pushButton_3.setText(_translate("MainWindow", "Send"))
self.pushButton_4.setText(_translate("MainWindow", "Clear logs"))
self.menuMenu_Action.setTitle(_translate("MainWindow", "Menu Action"))
self.actionVersion.setText(_translate("MainWindow", "Version"))
self.actionExit.setText(_translate("MainWindow", "Exit"))
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
#######################################################
# Executes When The SubMenu Item Version Is Clicked
self.actionVersion.triggered.connect(self.app_version)
#######################################################
#######################################################
# Executes When The SubMenu Item Exit Is Clicked
self.actionExit.triggered.connect(QtWidgets.qApp.quit)
#######################################################
self.menuMenu_Action.addAction(self.actionVersion)
self.menuMenu_Action.addAction(self.actionExit)
self.menubar.addAction(self.menuMenu_Action.menuAction())
self.start_server()
def clear_logs(self):
self.listWidget.clear()
def start_server(self):
threading.Thread(target=server_socket, args=(self,)).start()
self.msg_box("Success", "Server Started Sucessfully")
def client_send_message(self):
ip_address = self.lineEdit.text()
nick = self.lineEdit_2.text()
nick = nick.replace("#>","")
rmessage = self.textEdit.toPlainText()
rmessage = rmessage.replace("#>","")
rmsg = nick + " #> " + rmessage
c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
c.connect((ip_address, 10420))
except Exception:
self.msg_box("Connection Refused", "The Address You Are Trying To Reach Is Currently Unavailable")
return
try:
c.send(rmsg.encode())
self.listWidget.addItem(rmsg)
self.textEdit.clear()
except Exception:
self.msg_box("Connection Refused", "The Message Cannot Be Sent. End-Point Not Connected !!")
c.close()
def app_version(self):
self.msg_box("Application Version", "Test 0.1")
@QtCore.pyqtSlot(str, str)
def msg_box(self, title, data):
QtWidgets.QMessageBox.information(None, title, data)
@QtCore.pyqtSlot(str)
def update_list(self, data):
self.listWidget.addItem(data)
print("\a")
def server_socket(self):
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 10420))
s.listen(1)
except socket.error:
QtCore.QMetaObject.invokeMethod(self, "msg_box", QtCore.Qt.QueuedConnection, QtCore.Q_ARG(str, "Socket Error !!"),
QtCore.Q_ARG(str, "Unable To Setup Local Socket. Port In Use"))
return
while True:
conn, addr = s.accept()
incoming_ip = str(addr[0])
current_chat_ip = self.lineEdit.text()
if incoming_ip != current_chat_ip:
conn.close()
else:
data = conn.recv(4096).decode()
QtCore.QMetaObject.invokeMethod(self, "update_list", QtCore.Qt.QueuedConnection, QtCore.Q_ARG(str,data))
conn.close()
s.close()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
另一方面,我建议使用 QTcpSocket,因为使用它不需要线程,在这个 link 中。您可以找到几个示例。
关于python - PyQt --> addItem --> 类型错误 : arguments did not match any overloaded call:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53074766/
例如,如果我的程序名称是 test.c 然后对于以下运行命令,argc = 2 而不是 4。 $test abc pqr* *xyz* 最佳答案 尝试运行: $ echo abc pqr* *xyz*
我正在尝试使用一个容器来显示TextField,但是该容器不喜欢我的操作顺序。这是我的代码: Widget build(BuildContext context) { return Scaffol
我有以下代码: class MetricGoogleGateway extends AMetricGateway{ constructor(id, name, token) {
我像这样调用下面的对象方法。 new Cout( elem1 ).load( 'body' ) new COut( elem1 ).display( 'email' ) 我一次只使用一个实例。因为我一
我正在尝试使用 C++11 中的可变参数函数模板,并通过如下代码了解了基本思想: void helper() { std::cout void helper( T&& arg ) {
在学习 ExtJS 4 时,我发现在定义一个新类时,在 initComponent 中方法可以使用 this.callParent(arguments) 调用父类的构造函数. 我想知道这个 argum
使用 XCode 9,Beta 3。Swift 4。 statsView.createButton("Button name") { [weak self] Void in //stuff st
以下代码将打印1: (function (arguments) { console.log(arguments); }(1, 2)); 实际上,arguments 对象已被覆盖。是否可以恢复函
/** * @param $name * @return Response * @Route ("/afficheN/{name}",name="afficheN") */ public fu
我习惯使用Scala scopt用于命令行选项解析。您可以选择参数是否为 .required()通过调用刚刚显示的函数。 如何定义仅在定义了另一个参数时才需要的参数? 例如,我有一个标志 --writ
所以这是我的代码: def is_valid_move(board, column): '''Returns True if and only if there is an o
我试图在这里运行此代码: threads = [threading.Thread(name='ThreadNumber{}'.format(n),target=SB, args(shoe_type,m
在静态类型函数编程语言(例如 Standard ML、F#、OCaml 和 Haskell)中,编写函数时通常将参数彼此分开,并通过空格与函数名称分开: let add a b = a + b
function validateArguments(args) { if(args.length 2) { throw new RangeError("Invalid amo
我正在使用 Django 1.5 并尝试将参数传递到我的 URL。当我使用前两个参数时,下面的代码工作正常,使用第三个参数时我收到错误。我已经引用了新的 Django 1.5 更新中的 url 用法,
我刚刚开始使用 ember js 并且多次被这个功能绊倒 有人可以简要介绍一下 this._super() 的使用,并解释 ...arguments 的重要性 谢谢 最佳答案 每当您覆盖类/函数(例如
这个问题在这里已经有了答案: How to fix an "Argument passed to call that takes no arguments" error? (2 个答案) 关闭 3
我正在创建一个简单的登录注册应用程序。但是我遇到了错误,我不知道如何解决,请帮忙!这是我的代码: // // ViewController.swift // CHLogbook-Applicati
我是 Swift 的初学者。我尝试创建一个表示 Meal 的简单类。 它有一些属性和一个返回可选的构造函数 但是当我尝试测试它或在任何地方实例化它时,我得到的只是一个错误。似乎无法弄清楚发生了什么。
我有一个在特殊环境下运行其他程序的系统程序: cset shield -e PROGRAM .现在要运行一个 java 程序,我输入了 cset shield -e java PROGRAM ,但这不
我是一名优秀的程序员,十分优秀!