728x90
반응형

 

이번 툴바를 만들 때는 파이썬의 가변인자를 응용한 것이라 이해를 돕기 위해 파이썬의 가변인자 예제를 먼저 보여준 후 툴바를 만들것이다.

 

나는 파이참에서 실행하였다.

 

def my_sum(*integers):
    result=0
    for x in integers:
        result+=x
    return result

def concatenate(**kwargs):
    result=""
    print("딕셔너리",kwargs)
    for arg in kwargs.values():
        result += arg
    return result

print(my_sum(1,2,3,4)) #가변인자
print(concatenate(a="Real", b="파이썬", c="은", d="훌륭하다", e="!"))

 

이제 툴바를 만들어 보자

 

import sys
from PyQt5.QtCore import Qt

from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, QLabel, QToolBar, QStatusBar

class MainWindow(QMainWindow):
     def __init__(self, *args, **kwargs):
         super(MainWindow, self).__init__(*args, **kwargs)
         self.setWindowTitle("나의 놀라운 앱")
         label = QLabel("This is 놀랍다")
         label.setAlignment(Qt.AlignCenter)
         self.setCentralWidget(label)

         toolbar = QToolBar("나의 메인 툴바")
         self.addToolBar(toolbar)

         button_action = QAction("당신의 버튼",self)
         button_action.setStatusTip("이것은 당신의 버튼이에요")
         button_action.triggered.connect(self.onMyToolBarButtonClick)
         toolbar.addAction(button_action)
         self.setStatusBar(QStatusBar(self))

     def onMyToolBarButtonClick(self,s):
        print("눌렸다 : ",s)

if __name__ == "__main__":
    qApp = QApplication(sys.argv)
    main = MainWindow()
    main.show()
    sys.exit(qApp.exec_())

self는  mainWindow안에 멤버변수나 메서드를 뜻한다.

 

label 객체는 self가 없는데 넣어도 잘 된다!

 

self의 유무의 차이는 self가 없으면 지역변수가 되므로 다른 곳에서 쓸 수 없다. 자바의 this 느낌

 

멤버변수면 this와 비슷한 self를 줘야한다!

 

이 툴바를 실행하면 

당신의 버튼에 커서를 위치시키면 statebar 가 뜬다.

 

버튼을 누르면 console창에 뜬다.

 

 

728x90
반응형
728x90
반응형

* 본 포스팅은 주피터 노트북을 이용하였다. 이 코드로는 파이참에서도 실행이 가능하다.

 

가변 인자를 가지는 함수에 대해 알아보자

def foo(*args):
    print('인자의 갯수 : ',len(args))
    print('인자들 : ',args)

 

foo(10,20,30)

 

가변 인자를 가지는 함수를 이용한 합계 구하기

def sum_nums(*numbers):
    result=0
    for n in numbers:
        result+=n
    return result
sum_nums(10,20,30) # 60
sum_nums(10,20,30,70,11) #141

728x90
반응형

+ Recent posts