2021년 11월 10일 수요일

Pyside2 기초

- QT: c/c++언어 기반의 gui 라이브러리

- PyQT: QT와 다른 회사서 만듬

- PySide2: QT 회사에서 만듬

-------------------------------

from PySide2.QtWidgets import *

# 기본 절차: (1) 응용프로그램(App) 시작, (2) window 생성, (3) layout 생성,
#           (4) 위젯(버턴, 라벨, ...) 만듬, (5) layout에 위젯 추가, 
#           (6) layout을 window에 넘김, (7) window 출력, (8) App 실행

app = QApplication([]) # 응용 프로그램 시작
window = QWidget() # window를 생성
layout = QVBoxLayout() # layout을 생성

button = QPushButton("I'm just a Button man") # button 하나 만듬
layout.addWidget(QLabel('Hello World!')) # label을 layout에 추가

layout.addWidget(button) # button을 layout에 추가
window.setLayout(layout) # layout을 window로 넘김

window.show() # window 화면 출력
app.exec_() # 응용 프로그램 실행


참고

1. Medium



댓글 8개:

  1. *** SSH windows to ubuntu ***

    1. sudo apt-get install ssh
    2. sudo service ssh start # Enable the SSH server service
    3. sudo service ssh status # Check the SSH status
    4. Download PUTTY on Windows: https://www.putty.org/
    5. Install Putty to windows
    6. Run and configure Putty
    - IP address: 10.125.190.132
    - Port: 22 (default port)
    - SSH
    7. Login to Ubuntu server via Putty SSH client

    Reference:
    1. How to login into Ubuntu using SSH from Windows 10/8/7:
    https://www.how2shout.com/how-to/how-to-login-into-ubuntu-using-ssh-from-windows-10-8-7.html

    답글삭제
  2. *** FastAPI로 서비스 구축 ***
    - Ubuntu에 설치하고 uvicorn과 gunicorn으로 연결하고, nginx로 서비스하기

    0. conda activate fastapi38
    1. pip install fastapi
    2. pip install uvicorn
    3. nano main.py

    from fastapi import FastAPI
    app = FastAPI()

    @app.get("/")
    async def read_root():
    return {"msg": "world"}

    3. uvicorn main:app --reload # 서버 실행, reload: 코드 변경시 다시 로드
    4. curl -X 'GET' 'http://10.125.190.132/' # 응답: {"msg":"world"}
    5. sudo apt-get install -y --no-install-recommends tzdata git
    6. sudo apt-get update
    7. sudo apt-get install nginx
    8. sudo systemctl start nginx
    9. sudo chmod 775 /etc/nginx/sites-available
    10. pip install gunicorn
    11. gunicorn -k uvicorn.workers.UvicornWorker --access-logfile ./gunicorn-access.log main:app --bind 0.0.0.0:8000 --workers 2 --daemon
    12. sudo nano /etc/nginx/sites-available/fastapi.conf
    server{
    server_name 10.125.190.132;
    location / {
    include proxy_params;
    proxy_pass http://127.0.0.1:8000;
    }
    }
    13. sudo ln -s /etc/nginx/sites-available/fastapi.conf /etc/nginx/sites-enabled/fastapi.conf
    14. sudo nginx -t
    15. sudo systemctl restart nginx
    16. ps -ef | grep gunicorn
    17. 원격지에서 크롬 띄우고
    - 10.125.190.132 접속
    - 10.125.190.132/docs 접속

    Reference:
    1. https://facerain.club/fast-api-tutorial-1/
    2. https://facerain.club/fastapi-nginx/

    답글삭제
    답글
    1. curl 요청이 거절될 때:
      > netstat -ln | grep 8080
      tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN

      8080 port에서 Listen 중인 뭔가 있는지를 체크할 수 있다.
      모든 Listen상태를 다 볼려면
      > sudo netstat -tulpn

      삭제
    2. *** FastAPI 서비스 및 확인 ***

      먼저 py파일 내에 아래와 같은 형태가 들어 있어야 함:
      ...
      fastapi = FastAPI()
      ray.init(address="auto", namespace="summarizer")
      serve.start(detached=True)
      ...

      실행:
      >ray start --head
      를 먼저 실행하고
      >python filename.py # 코드 실행 여부 체크
      또는
      >gunicorn -k uvicorn.workers.UvicornWorker --access-logfile ./gunicorn-access.log test6:app --bind 0.0.0.0:7995 --workers 2 --daemon # py파일을 uvicorn으로 api 서비스
      로 실행

      7995번으로 서비스되는게 있는지 체크해보기 위해서는
      기존 것이 이 포트로 이미 서비스 되고 있으면 제거 후에 gunicorn을 실행해야 함.

      >netstat -ln | grep 7995 # 7995번으로 열린(LISTEN) 포트가 있는지 체크
      >sudo fuser -k 7995/tcp # 7995번으로 열린 port를 제거

      >curl -X GET localhost:7995/ # 7995포트로 호출되는지 체크

      chrome 열고 원격으로 접속해서 체크해 볼 수 있음:
      10.125.190.132:7995/docs

      삭제
    3. *** NGINX 시작, 중지 ***
      sudo systemctl start nginx
      sudo systemctl stop nginx
      sudo systemctl restart nginx

      삭제
    4. *** ray 실행 상태 확인 ***
      >ray start --head
      >ray status
      ...
      Usage:
      2.0/16.0 CPU # num_replicas=2에 의해 core 2개 사용
      0.0/2.0 GPU
      0.0/1.0 accelerator_type:RTX
      0.00/34.295 GiB memory
      ...

      >ray stop # 모든 ray 실행 제거

      삭제
  3. ## 절대 시간 측정 (network time protocal)
    pip install ntplib # 설치

    > import ntplib
    > from datetime import datetime, timezone
    > c = ntplib.NTPClient()
    > response = c.request('time.google.com')
    > response.offset
    0.5630807876586914

    > dir(response)
    ['_PACKET_FORMAT', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'delay', 'dest_time', 'dest_timestamp', 'from_data', 'leap', 'mode', 'offset', 'orig_time', 'orig_timestamp', 'poll', 'precision', 'recv_time', 'recv_timestamp', 'ref_id', 'ref_time', 'ref_timestamp', 'root_delay', 'root_dispersion', 'stratum', 'to_data', 'tx_time', 'tx_timestamp', 'version']

    > response.recv_time
    1639731530.288301
    > response = c.request('time.google.com')
    > response.recv_time
    1639732409.5878935

    > response.recv_timestamp
    3848721230.5001526
    > response = c.request('time.google.com')
    > response.recv_timestamp
    3848721305.5317435

    답글삭제
  4. I like your article where you talked about many freelancing platforms provide good projects to unity game development developers with good pay according to their skills. I also know one of the platforms, Eiliana.com is a great platform; It’s a new yet great platform for technical experts.

    답글삭제