๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
2022/์˜คํ”ˆ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ์ ํŠธ

GUI ๊ฐ•์˜ 5

by hyeonha 2022. 11. 23.

๋ชฉ์ฐจ

    ๊ณ„์‚ฐ๊ธฐ ๋งŒ๋“ค๊ธฐ 

    ์ด ํ˜•ํƒœ๋ฅผ 

    ์ด ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ”๋ณด์ž

    ์ค‘๊ฐ„ ๊ณผ์ •

     

    import sys
    from PyQt5.QtWidgets import *
    
    class Main(QDialog):
        def __init__(self):
            super().__init__()
            self.init_ui()
    
        def init_ui(self):
            main_layout =QVBoxLayout()
    
            #๋ ˆ์ด์•„์›ƒ ํ‹€ ์žก๊ธฐ
    
            layout_operation = QHBoxLayout()
            layout_clear_equal = QHBoxLayout()
            layout_number = QGridLayout()
            layout_equation_solution = QFormLayout()
    
            ### equation , solution ###
            self.equation = QLineEdit()
            self.solution = QLineEdit()
            layout_equation_solution.addRow("Equation: ",self.equation)
            layout_equation_solution.addRow("Solytion:" ,self.solution)
    
            ### + = * / opeation ###
            button_plus =QPushButton("+")
            button_minus =QPushButton("-")
            button_product =QPushButton("*")
            button_devision =QPushButton("/")
    
    
    
            layout_operation.addWidget(button_plus)
            layout_operation.addWidget(button_minus)
            layout_operation.addWidget(button_product)
            layout_operation.addWidget(button_devision)
    
    
            ###clear , equal = ###
            button_clear = QPushButton("Clear")
            button_equal=QPushButton("=")
    
            layout_clear_equal.addWidget(button_clear)
            layout_clear_equal.addWidget(button_equal)
    
            ### number button ###
            number_button_dicct ={}
            for number in range(0,10):
                number_button_dicct[number] = QPushButton(str(number))
                if number>0:
                    x,y = divmod(number-1,3)
                     # 3์œผ๋กœ ๋‚˜๋ˆด์„ ๋•Œ ๋ชซ๊ณผ ๋‚˜๋จธ์ง€์— ๋”ฐ๋ผ ๋ฐฐ์น˜๋ฅผ ํ•˜๋ฉด ๋œ๋‹ค.
                    layout_number.addWidget(number_button_dicct[number], x, y)
                elif number ==0:
                    layout_number.addWidget(number_button_dicct[number],3,1)
    
    
    
            main_layout.addLayout(layout_equation_solution)
            main_layout.addLayout(layout_operation)
            main_layout.addLayout(layout_clear_equal)
            main_layout.addLayout(layout_number)
    
            self.setLayout(main_layout)
            self.resize(400, 400)
            self.show()
    
    
    if __name__ =='__main__':
        app = QApplication(sys.argv)
        main = Main()
        sys.exit(app.exec_())


    ์ด๋ฒคํŠธ ์ถ”๊ฐ€ํ•˜๊ธฐ

    ### ์ด๋ฒคํŠธ ์ถ”๊ฐ€ํ•˜๊ธฐ  ###
    button_plus.clicked.connect(self.button_plus_click)
    ### ์ด๋ฒคํŠธ ์ถ”๊ฐ€ํ•˜๊ธฐ  ###
    button_plus.clicked.connect(self.button_plus_clicked)
    button_minus.clicked.connect(self.button_minus_clicked)
    button_product.clicked.connect(self.button_product_clicked)
    button_devision.clicked.connect(self.button_devision_clicked)
    
    layout_operation.addWidget(button_plus)
    layout_operation.addWidget(button_minus)
    layout_operation.addWidget(button_product)
    layout_operation.addWidget(button_devision)
    
    
    def button_plus_clicked(self):
        #ํ˜„์žฌ equation ๋”ฐ์˜ค๊ธฐ
        equation = self.equation.text()
        equation += '+'
        self.equation.setText(equation)
    
    def button_minus_clicked(self):
            # ํ˜„์žฌ equation ๋”ฐ์˜ค๊ธฐ
            equation = self.equation.text()
            equation += '-'
            self.equation.setText(equation)
    
    def button_product_clicked(self):
                # ํ˜„์žฌ equation ๋”ฐ์˜ค๊ธฐ
                equation = self.equation.text()
                equation += '*'
                self.equation.setText(equation)
    
    def button_devision_clicked(self):
                    # ํ˜„์žฌ equation ๋”ฐ์˜ค๊ธฐ
                    equation = self.equation.text()
                    equation += '/'
                    self.equation.setText(equation)
    

     


    ์ˆซ์ž ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด Equation์— ๋œจ๋„๋ก

    number_button_dicct[number].clicked.connect(lambda state, num=number: self.number_button_click(num))
    
    def number_button_click(self,num):
        equation = self.equation.text()
        equation+=str(num)
        self.equation.setText(equation)

     

     


    equal ๊ธฐ๋Šฅ

    eval(์ˆ˜์‹) -> ์ˆ˜์‹์„ ๊ณ„์‚ฐํ•œ ๊ฐ’์„ returnํ•œ๋‹ค. 

    button_equal.clicked.connect(self.button_equal_click)
    def button_equal_click(self):
        equation = self.equation.text()
        solution = eval(equation)
        self.solution.setText(str(solution))

     


    clear ๋ฒ„ํŠผ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

    ์ด ์ƒํƒœ์—์„œ clear ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด

    ์ง 


    ๊ธฐ๋Šฅ ์ˆ˜์ •

    #๋žŒ๋‹ค ํ•จ์ˆ˜
    button_plus.clicked.connect(lambda state, operation="+":self.button_operation_clicked(operation))
    button_minus.clicked.connect(lambda state, operation="-":self.button_operation_clicked(operation))
    button_product.clicked.connect(lambda state, operation="*":self.button_operation_clicked(operation))
    button_devision.clicked.connect(lambda state, operation="/":self.button_operation_clicked(operation))
    
    def button_operation_clicked(self,operation):
        #ํ˜„์žฌ equation ๋”ฐ์˜ค๊ธฐ
        equation = self.equation.text()
        equation += operation
        self.equation.setText(equation)

    ์‚ฌ์น™์—ฐ์‚ฐ ๊ธฐ๋Šฅ์„ ๋žŒ๋‹ค ํ•จ์ˆ˜ ์ด์šฉํ•ด์„œ ์ˆ˜์ •ํ•ด์ฃผ์—ˆ๋‹ค.

    728x90

    '2022 > ์˜คํ”ˆ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ์ ํŠธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    UI ์ˆ˜์ •ํ•˜๊ธฐ  (0) 2022.11.23
    QGridLayout  (0) 2022.11.23
    GUI ๊ฐ•์˜ 4  (0) 2022.11.22
    GUI ๊ฐ•์˜3  (0) 2022.11.21
    GUI ๊ฐ•์˜2: ๋ ˆ์ด์•„์›ƒ  (0) 2022.11.20