Python | PyQt5 | GUI |

Как стильно реализовать данный код на PyQt5 ? Я не разбираюсь в PyQt5 и не знаю как им пользоваться.

import requests
import time
import json

ip = input('IP : ')

if ip == '':
    print('[Info] Ваш ip')
    response = requests.get(url=f'http://ip-api.com/json/').json()
    ip = response.get('query')
else:
    response = requests.get(url=f'http://ip-api.com/json/{ip}').json()
try:
    data = {'[⚝ IP]': response.get('query'),'∟[Int prov]': response.get('isp'),'∟[Org]': response.get('org'),'∟[Country]': response.get('country'),'∟[Region Name]': response.get('regionName'),'∟[City]': response.get('city'),'∟[ZIP]': response.get('zip'),'∟[Lat]': response.get('lat'),'∟[Lon]': response.get('lon')}
except:
    print('IP address entered incorrectly')
for k, v in data.items():
    
    info = f'{k} : {v}' + '\n';txt = info
    for i in txt:   time.sleep(0.001);print(i, end= '', flush=True)

Ответы (1 шт):

Автор решения: S. Nick

Один из возможных вариантов визуализации вашей программы, может выглядеть примерно так:

import sys
import requests
import json
from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.Qt import *


class WorkThread(QThread):
    threadSignal = pyqtSignal(str)

    def __init__(self, ip):
        super().__init__()
        self.ip = ip

    def run(self):
        try:
            if self.ip == '':
                #print('[Info] Ваш ip')
                self.threadSignal.emit(f'<div style="color: #0FF0F1">[Info] Ваш ip</div>')
                response = requests.get(url=f'http://ip-api.com/json/').json()
                ip = response.get('query')
            else:
                response = requests.get(url=f'http://ip-api.com/json/{self.ip}').json()
        except:
            self.threadSignal.emit('''
                <div style="color: #DD4A48">
                <br>Проверьте подключение к интернету<br>
1. Проверьте соединение в меню «Доступ к интернету» в правой части панели задач Windows. ...<br>
2. Посмотрите на роутер: горит ли индикатор подключения к сети, 
обозначающий работающее интернет-соединение?<br>
3. Если индикатор не горит, то проблема может быть в Ethernet-кабеле.<br>
                </div>
            ''')
            self.msleep(2000)
        data = {}
        try:
            data = {
                '[⚝ IP]': response.get('query'),
                '∟[Int prov]': response.get('isp'),
                '∟[Org]': response.get('org'),
                '∟[Country]': response.get('country'),
                '∟[Region Name]': response.get('regionName'),
                '∟[City]': response.get('city'),
                '∟[ZIP]': response.get('zip'),
                '∟[Lat]': response.get('lat'),
                '∟[Lon]': response.get('lon')
            }
        except:
            #print('IP address entered incorrectly')
            if data:           
                self.threadSignal.emit(
                    '<div style="color: #f00">IP address entered incorrectly<br></div>')
        
        for k, v in data.items():
            text = f'{k} : {v}'
            if k == '∟[Int prov]' and v is None:
                self.threadSignal.emit(
                    f'<div style="color: #f00">IP address entered incorrectly</div>')
                break
            else:
                self.threadSignal.emit(f'<div style="color: #0FF0F1">{text}</div>')
                
            self.msleep(100)
            
        self.threadSignal.emit(f'{"- " * 40} <br>')  
        

class MainWindow(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setObjectName("mainwindow")
        
        self.textBrowser = QtWidgets.QTextBrowser()
        self.textBrowser.setText('Hi')
        
        self.lineEdit = QtWidgets.QLineEdit()
        self.lineEdit.setPlaceholderText("Введите `IP` и/или нажмите`Еnter`")
        self.lineEdit.returnPressed.connect(self.requests_get)
        
        layout = QtWidgets.QGridLayout(self)
        layout.addWidget(self.textBrowser)
        layout.addWidget(self.lineEdit)
        self.lineEdit.setFocus() 
        
    def requests_get(self):
        ip = self.lineEdit.text()
        self.thread = WorkThread(ip)
        self.thread.threadSignal.connect(self.on_threadSignal)
        self.thread.start()    
    
    def on_threadSignal(self, data):
        self.textBrowser.append(data)    
    

qss = """
#mainwindow {
    background-color: #389393;
}

QLineEdit {
    background-color: rgb(227, 229, 235);
    border-radius: 5px;
    border: 2px solid rgb(227, 29, 35);
    padding-left: 10px;
    height: 40px;
    /* color: #f00;  */
}
QLineEdit:hover {
    border: 2px solid rgb(64, 71, 188);
}
QLineEdit:focus {
    border: 2px solid rgb(91, 201, 124);
}

QTextBrowser {
    background-color: #232629;  
    color: #0FF0F1;
}
QTextBrowser:hover,
QTextBrowser:!hover,
QTextBrowser::selected,
QTextBrowser::pressed {
    border: 4px solid #f0f0f0;    
    padding: -4px 0px 0px 4px;
}

"""


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    app.setFont(QtGui.QFont("Times", 12, QtGui.QFont.Bold))
    app.setStyleSheet(qss)
    w = MainWindow()
    w.resize(640, 480)
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка