> For the complete documentation index, see [llms.txt](https://study-code.gitbook.io/python-basic/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://study-code.gitbook.io/python-basic/qtpy/pyqt-widget/qwidget.md).

# QWidget

## 사용 되는 곳

QWidget은 그림 그릴 떄 사용되는 캔버스라고 생각하시면 됩니다.\
QWidget위에 다양한 Widget들을 배치시켜 화면에 나타나게 합니다.

## 생성

```python
# -*- coding: UTF-8 -*-
import sys
from PyQt5.QtWidgets import QApplication, QWidget
class App(QWidget):
    def __init__(self):
        super(App, self).__init__()
        self.setWindowTitle('Window!!!')
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = App()
    window.show()
    sys.exit(app.exec_())
```

01  sys 모듈은 사용자 입력이나 외부 경로에 대한 값 전달에 사용됩니다. 이외 Python을 실행하기 위한 시스템 값들에 대한 정보를 담고 있습니다.\
&#x20;     <https://docs.python.org/3/library/sys.html> \
02  PyQt5.QtWidgets 모듈은 GUI를 구성하기 위한 거의 모든 Widget들을 담고 있습니다.\
&#x20;     <http://pyqt.sourceforge.net/Docs/PyQt5/QtWidgets.html>\
04  QWidget을 상속 받은 App Class를 만듭니다.\
06  \_\_init\_\_ 함수는 클레스가 생성될 때 최초로 호출 됩니다.\
07  QWidget을 상속받았기 때문에 QWidget이 생성될 때 필요한 값을 전달해줍니다.\
08  화면에 생성 될 Window 제목을 'Window!!!' 로 설정합니다.\
11  QtPy 어플리케이션의 시작을 알리는 QApplication을 생성합니다.\
12  앞서 만든 App을 생성합니다.\
13  생성된 App을 화면에 보이도록 합니다.\
14  시스템이 종료 될 때 정상적 종료(0), 비 정상적 종료를 알려 줍니다(1)

모든 것을 이해하기는 어렵습니다.\
윈도우 생성으로 PyQt에 한걸음 다가갔다고 생각하면 됩니다. \
이제 생성한 윈도우의 속성값을 변경해서 우리가 원하는 형태로 변경해보겠습니다.

## 크기 조절

원하는 크기로 Window를 생성할 수 있습니다.

```python

import sys
from PyQt5.QtWidgets import QApplication, QWidget
class App(QWidget):
    def __init__(self):
        super(App, self).__init__()
        self.setWindowTitle('Window!!!')
        self.resize(500, 600)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = App()
    window.show()
    sys.exit(app.exec_())
```

09  크기를 가로 500px, 세로 600px 으로 변경합니다.

## 위치 조절

화면의 원하는 위치에서 시작하도록 설정 할 수 있습니다.

```python
import sys
from PyQt5.QtWidgets import QApplication, QWidget
class App(QWidget):
    def __init__(self):
        super(App, self).__init__()
        self.setWindowTitle('Window!!!')
        self.resize(500, 600)
        self.move(100, 100)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = App()
    window.show()
    sys.exit(app.exec_())
```

10  화면의 가로 100px, 세로 100px 위치가 시작점이 됩니다.

## 위치와 크기를 같이 조절

```python
import sys
from PyQt5.QtWidgets import QApplication, QWidget
class App(QWidget):
    def __init__(self):
        super(App, self).__init__()
        self.setWindowTitle('Window!!!')
        self.setGeometry(100, 100, 500, 600)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = App()
    window.show()
    sys.exit(app.exec_())
```

09  setGeometry(가로 위치, 세로 위치, 가로 크기, 세로 크기)&#x20;

## 배경 색 변경

```python
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtCore import Qt
from PyQt5 import QtGui
class App(QWidget):
    def __init__(self):
        super(App, self).__init__()
        self.setWindowTitle('Window!!!')
        self.setGeometry(100, 100, 500, 600)
        self.setBackgroundColor()
    def setBackgroundColor(self):
        self.setAutoFillBackground(True)
        p = self.palette()
        p.setColor(self.backgroundRole(), Qt.white)
        p.setColor(self.backgroundRole(), QtGui.QColor(0,0,244))
        self.setPalette(p)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = App()
    window.show()
    sys.exit(app.exec_())
```

12  setBackgroundColor 함수를 호출합니다.\
15  백그라운드를 자동으로 꽉 채워주는 옵션입니다.\
16  현재 사용중인 palette를 가져옵니다. palette는 각위젯의 컬러를 관리합니다.\
17  색깔을 변경합니다.\
18  RBG 값을 이용해 색을 변경 할 떄 사용합니다.\
19  변경된 palette를 다시 끼웁니다.&#x20;
