Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ Π½Π° python / Π₯Π°Π±Ρ€

Начало

ЗдравствуйтС, Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ я ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π» ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ Π½Π° python, Π° сСйчас ΠΌΡ‹ посмотри ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ простой ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ Π½Π° python tkinter.


Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ ΠΎΠΊΠ½ΠΎ 485 Π½Π° 550. Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π½Π΅ Π²Π°ΠΆΠ½Ρ‹, ΠΌΠ½Π΅ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΠΈΡΡŒ Ρ‚Π°ΠΊΠΈΠ΅. Π’Π°ΠΊ ΠΆΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ.

from tkinter import *


class Main(Frame):
    def __init__(self, root):
        super(Main, self).__init__(root)
        self.build()

    def build(self):
        pass
 
    def logicalc(self, operation):
        pass

    def update():
       pass


if __name__ == '__main__':
    root = Tk()
    root["bg"] = "#000"
    root.geometry("485x550+200+200")
    root.title("ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€")
    root.resizable(False, False)
    app = Main(root)
    app.pack()
    root.mainloop()

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ, ΠΈΠ΄Ρ‘ΠΌ дальшС.


Π”Π΅Π»Π°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΎΡ‡ΠΊΠΈ

Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ build создаём Ρ‚Π°ΠΊΠΎΠΉ список:

btns = [
            "C", "DEL", "*", "=",
            "1", "2", "3", "/",
            "4", "5", "6", "+",
            "7", "8", "9", "-",
            "+/-", "0", "%", "X^2"
        ]

Он ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° всС ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ Ρƒ нас Π² ΠΎΠΊΠ½Π΅.

ΠœΡ‹ создали список, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ проходимся Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ эти ΠΊΠ½ΠΎΠΏΠΊΠΈ. Для этого Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ пишСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

x = 10
        y = 140
        for bt in btns:
            com = lambda x=bt: self.logicalc(x)
            Button(text=bt, bg="#FFF",
                   font=("Times New Roman", 15),
                   command=com).place(x=x, y=y,
                                      width=115,
                                      height=79)
            x += 117
            if x > 400:
                x = 10
                y += 81

Π—Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΎΡ‡ΠΊΠΈ. ДобавляСм надпись с Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. Π― Ρ…ΠΎΡ‡Ρƒ Ρ‡Ρ‚ΠΎ Π±Ρ‹ тСкст Π±Ρ‹Π» слСва, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π°Ρ‚Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² выравнивания тСкста ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ.

self.formula = "0"
self.lbl = Label(text=self.formula, font=("Times New Roman", 21, "bold"),
                 bg="#000", foreground="#FFF")
self.lbl.place(x=11, y=50)

ПишСм Π»ΠΎΠ³ΠΈΠΊΡƒ

def logicalc(self, operation):
    if operation == "C":
        self.2":
        self.formula = str((eval(self.formula))**2)
    elif operation == "=":
        self.formula = str(eval(self.formula))
    else:
        if self.formula == "0":
            self.formula = ""
        self.formula += operation
    self.update()

def update(self):
    if self.formula == "":
        self.formula = "0"
    self.lbl.configure(text=self.formula)

Π’Π°ΠΊ, ΠΊΠ°ΠΊ Ρƒ нас Π½Π΅Ρ‚ Π²Π²ΠΎΠ΄Π° с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ сСбС ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, просто ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π° спСц. ΠΊΠ½ΠΎΠΏΠΊΠΈ (C, DEL, =) ΠΈ Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях просто Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ это ΠΊ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅.

Π£ этого ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° мноТСство Π½Π΅Π΄ΠΎΡ‡Π΅Ρ‚ΠΎΠ², Π½ΠΎ ΠΌΡ‹ ΠΈ Π½Π΅ ΡΡ‚Ρ€Π΅ΠΌΠΈΠ»ΠΈΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ.

ΠŸΡ€ΠΎΡˆΡƒ прощСния Π·Π° ошибки Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅. ΠŸΠΈΡˆΠΈΡ‚Π΅, я ΠΈΡΠΏΡ€Π°Π²Π»ΡŽΡΡŒ.
from tkinter import *


class Main(Frame):
    def __init__(self, root):
        super(Main, self).__init__(root)
        self.build()

    def build(self):
        self.formula = "0"
        self.lbl = Label(text=self.formula, font=("Times New Roman", 21, "bold"), bg="#000", foreground="#FFF")
        self.2":
            self.formula = str((eval(self.formula))**2)
        elif operation == "=":
            self.formula = str(eval(self.formula))
        else:
            if self.formula == "0":
                self.formula = ""
            self.formula += operation
        self.update()

    def update(self):
        if self.formula == "":
            self.formula = "0"
        self.lbl.configure(text=self.formula)


if __name__ == '__main__':
    root = Tk()
    root["bg"] = "#000"
    root.geometry("485x550+200+200")
    root.title("ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€")
    root.resizable(False, False)
    app = Main(root)
    app.pack()
    root.mainloop()

ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ Π½Π° Python 3 с графичСским интСрфСйсом β€” ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

МногиС программисты ΡΡ‚Π°Ρ€Π°ΡŽΡ‚ΡΡ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ языки  программирования с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ написания достаточно простых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Один ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² – написаниС ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅ Python ΠΈΠ»ΠΈ запустив консоль. Но Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° python свой ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ с графичСским интСрфСйсом.

Π‘Ρ‡ΠΈΡ‚Π°Π΅ΠΌ Π² консолС

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ матСматичСскиС выраТСния ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ консоль. Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ python. ПослС этого Π½Π°Π±ΠΈΡ€Π°Π΅ΠΌ матСматичСскиС выраТСния ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΡ‚Π²Π΅Ρ‚. Для этого Π΄Π°ΠΆΠ΅ Π½Π΅ Π½Π°Π΄ΠΎ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Π”Π΅Π»Π°Π΅ΠΌ простой ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€

Π›ΡƒΡ‡ΡˆΠ΅ всСго Π·Π°ΠΊΡ€Π΅ΠΏΠ»ΡΡ‚ΡŒ свои знания ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ написания простых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π’Π°ΠΊΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ – ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€ΡŒ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для хранСния Π·Π°ΠΌΠ΅Ρ‚ΠΎΠΊ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·Π° ΠΏΠΎΠ³ΠΎΠ΄Ρ‹.

МоТно Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая Π΄Π΅Π»Π°Π΅Ρ‚ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Ρ‹ ΠΈ сохраняСт ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ изобраТСния Π² ΠΏΠ°ΠΏΠΊΡƒ. Π’ любом случаС, Π½Π°Π΄ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π½Π΅ слоТноС Π·Π°Π΄Π°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π·Π°ΠΊΠΎΠΏΠ°Ρ‚ΡŒΡΡ Π² Π½Π΅ΠΌ. ΠŸΠΎΡ‚ΠΎΠΌ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎ-настоящСму ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π’ нашСм случаС ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ простой графичСский ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ Π½Π° Python 3.

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ графичСского интСрфСйса Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ стандартным ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ Tkinter. Он Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состав Python 3. БоотвСтствСнно, Ссли Ρƒ вас установлСн Python, Ρ‚ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ Π½Π°Π΄ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ.

Π’ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… строках Ρ„Π°ΠΉΠ»Π° calculator.py ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  • Tkinter для графичСского интСрфСйса;
  • Decimal для вычислСний с большСй Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ точности float Π½Π΅ достаточно.

Π˜ΠΌΠΏΠΎΡ€Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ исходныС Π΄Π°Π½Π½Ρ‹Π΅

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ прилоТСния  β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Tk с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ Calculator. Π’ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ buttons Π±ΡƒΠ΄ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ обозначСния для ΠΊΠ½ΠΎΠΏΠΎΠΊ. Π’ список stack Π±ΡƒΠ΄Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ числа ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π΄ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ. activeStr ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для хранСния Π½Π°Π±ΠΈΡ€Π°Π΅ΠΌΠΎΠ³ΠΎ числа.

from tkinter import *
from decimal import *

root = Tk()
root.title('Calculator')

buttons = (('7', '8', '9', '/', '4'),
           ('4', '5', '6', '*', '4'),
           ('1', '2', '3', '-', '4'),
           ('0', '.', '=', '+', '4')
           )

activeStr = ''
stack = []

ВычислСниС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°

Ѐункция calculate ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈΠ· списка stack ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π°Π΄ Π½ΠΈΠΌΠΈ Π½Π°Π΄ΠΎ произвСсти. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ отобраТаСтся Π² надписи label. ΠŸΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈΠ· списка строки Π±ΡƒΠ΄Π΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° pop.

def calculate():
    global stack
    global label
    result = 0
    operand2 = Decimal(stack.pop())
    operation = stack.pop()
    operand1 = Decimal(stack.pop())

    if operation == '+':
        result = operand1 + operand2
    if operation == '-':
        result = operand1 - operand2
    if operation == '/':
        result = operand1 / operand2
    if operation == '*':
        result = operand1 * operand2
    label.configure(text=str(result))

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° наТатия

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ click выполняСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавиши. Π’ качСствС Π΅Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° пСрСдаСтся тСкст, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π°ΠΆΠ°Π»ΠΈ. Π₯ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π²Π²ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ прямо Π² надписи, Π° Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ для этого ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. Но Ρ‚Π°ΠΊ Π½Π΅ получаСтся ΠΈΠ·-Π·Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ посчитан Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΎΠ½ записываСтся Π² надписи. ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ послС этого Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ число, ΠΎΠ½ΠΎ Π±Ρ‹ дописывало ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Π’ спискС с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ для ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ 3. Но ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° pop, Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ 3 послСдних Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… значСния. А послС провСдСния расчСта список очистится. Π”Π°Π»Π΅Π΅ Π² Π½Π΅Π³ΠΎ добавляСтся ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π½Π° случай Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΌΠ΅Ρ‚ Π½Π° ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π΅ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сразу, Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ число.

def click(text):
    global activeStr
    global stack
    if text == 'CE':
        stack.clear()
        activeStr = ''
        label.configure(text='0')
    elif '0' <= text <= '9':
        activeStr += text
        label.configure(text=activeStr)
    elif text == '.':
        if activeStr.find('.') == -1:
            activeStr += text
            label.configure(text=activeStr)
    else:
        if len(stack) >= 2:
            stack.append(label['text'])
            calculate()
            stack.clear()
            stack.append(label['text'])
            activeStr = ''
            if text != '=':
                stack.append(text)
        else:
            if text != '=':
                stack.append(label['text'])
                stack.append(text)
                activeStr = ''
                label.configure(text='0')

Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Π²ΠΈΠ΄

Π’Π΅ΠΏΠ΅Ρ€ΡŒ займСмся ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ внСшнСго Π²ΠΈΠ΄Π° ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° ΠΈ Π·Π°Π΄Π°Π΄ΠΈΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ наТатия ΠΊΠ½ΠΎΠΏΠΎΠΊ. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ надпись для Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π°Π±ΠΈΡ€Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ². Π’ Ρ†ΠΈΠΊΠ»Π΅ создаСм ΠΊΠ½ΠΎΠΏΠΊΠΈ. РасполоТСниС ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΈ надписи осущСствляСтся Π² Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‰ΠΈΠΊΠ° grid. И Π² Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ запускаСм Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий mainloop.

label = Label(root, text='0', width=35)
label.grid(row=0, column=0, columnspan=4, sticky="nsew")

button = Button(root, text='CE', command=lambda text='CE': click(text))
button.grid(row=1, column=3, sticky="nsew")
for row in range(4):
    for col in range(4):
        button = Button(root, text=buttons[row][col],
                command=lambda row=row, col=col: click(buttons[row][col]))
        button.grid(row=row + 2, column=col, sticky="nsew")

root.grid_rowconfigure(6, weight=1)
root.grid_columnconfigure(4, weight=1)

root.mainloop()

Π£ надписи выставлСна ΡˆΠΈΡ€ΠΈΠ½Π° 35, для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΏΠΎΠ΄ΡΡ‚Ρ€Π°ΠΈΠ²Π°Π»ΠΎΡΡŒ ΠΏΠΎΠ΄ надпись. И Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΡ€ΠΈ этом Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Π»ΡƒΡ‡ΡˆΠ΅ выглядят.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ, ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΊΠ½ΠΎΠΏΠΎΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свою Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ lambda.

Β 

По Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° python ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° ΠΌΠΎΠΆΠ½ΠΎ сдСль, допустим, ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€ΡŒ. Для этого Π½Π°Π΄ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π΄Π°Ρ‚Ρƒ Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ мСсяц, Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅ числа Π²Ρ‹ΠΏΠ°Π΄ΡƒΡ‚ Π½Π° понСдСльники, ΠΊΠ°ΠΊΠΎΠΉ Π³ΠΎΠ΄ високосный. Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π³ΠΎΠ΄ ΠΈ мСсяцы.

Π‘Π°ΠΌΡ‹ΠΉ простой ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ Π½Π° Python 3 для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ²

# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

def main():

Β Β Β Β # Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ сообщСниС

Β Β Β Β print(«Π­Ρ‚ΠΎ простой ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ Π½Π° Python»)

Β Β Β Β # ЗапускаСм бСсконСчный Ρ†ΠΈΠΊΠ»

Β Β Β Β while True:

Β Β Β Β Β Β Β Β # Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ сообщСниС ΠΊΠ°ΠΊΠΈΠ΅ дСйствия Π΅ΡΡ‚ΡŒ

Β Β Β Β Β Β Β Β print(«Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ дСйствиС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ:\n»

Β Β Β Β Β Β Β Β Β Β Β Β Β Β «Π‘Π»ΠΎΠΆΠΈΡ‚ΡŒ: +\n»

Β Β Β Β Β Β Β Β Β Β Β Β Β Β «Π’Ρ‹Ρ‡Π΅ΡΡ‚ΡŒ: -\n»

Β Β Β Β Β Β Β Β Β Β Β Β Β Β «Π£ΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ: *\n»

Β Β Β Β Β Β Β Β Β Β Β Β Β Β «ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒ: /\n»

Β Β Β Β Β Β Β Β Β Β Β Β Β Β «Π’Ρ‹ΠΉΡ‚ΠΈ: q\n»)

Β Β Β Β Β Β Β Β # ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ для хранСния дСйствия

Β Β Β Β Β Β Β Β action = input(«Π”СйствиС: «)

Β Β Β Β Β Β Β Β # Если action Ρ€Π°Π²Π΅Π½ q Ρ‚ΠΎ

Β Β Β Β Β Β Β Β if action == «q»:

Β Β Β Β Β Β Β Β Β Β Β Β # Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ сообщСниС

Β Β Β Β Β Β Β Β Β Β Β Β print(«Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹»)

Β Β Β Β Β Β Β Β Β Β Β Β # Π’Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π°

Β Β Β Β Β Β Β Β Β Β Β Β break

Β Β Β Β Β Β Β Β # Если action Ρ€Π°Π²Π΅Π½ +, -, *, /, Ρ‚ΠΎ

Β Β Β Β Β Β Β Β if action in (‘+’, ‘-‘, ‘*’, ‘/’):

Β Β Β Β Β Β Β Β Β Β Β Β # ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ x

Β Β Β Β Β Β Β Β Β Β Β Β x = float(input(«x = «))

Β Β Β Β Β Β Β Β Β Β Β Β # ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ y

Β Β Β Β Β Β Β Β Β Β Β Β y = float(input(«y = «))

Β Β Β Β Β Β Β Β Β Β Β Β # Если action Ρ€Π°Π²Π΅Π½ + Ρ‚ΠΎ

Β Β Β Β Β Β Β Β Β Β Β Β if action == ‘+’:

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β # Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ сумму x ΠΈ y

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β print(‘%.2f + %.2f = %.2f’ % (x, y, x+y))

Β Β Β Β Β Β Β Β Β Β Β Β # Если action Ρ€Π°Π²Π΅Π½ — Ρ‚ΠΎ

Β Β Β Β Β Β Β Β Β Β Β Β elif action == ‘-‘:

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β # Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Ρ€Π°Π·Π½ΠΎΡΡ‚ΡŒ x ΠΈ y

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β print(‘%.2f — %.2f = %.2f’ % (x, y, x-y))

Β Β Β Β Β Β Β Β Β Β Β Β # Если action Ρ€Π°Π²Π΅Π½ * Ρ‚ΠΎ

Β Β Β Β Β Β Β Β Β Β Β Β elif action == ‘*’:

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β # Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ умноТСния x Π½Π° y

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β print(‘%.2f * %.2f = %.2f’ % (x, y, x*y))

Β Β Β Β Β Β Β Β Β Β Β Β # Если action Ρ€Π°Π²Π΅Π½ / Ρ‚ΠΎ

Β Β Β Β Β Β Β Β Β Β Β Β elif action == ‘/’:

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β # Если y Π½Π΅ Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ Ρ‚ΠΎ

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β if y != 0:

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β # Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ дСлСния x Π½Π° y

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β print(‘%.2f / %.2f = %.2f’ % (x, y, x/y))

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β else: # Π˜Π½Π°Ρ‡Π΅

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β # Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ сообщСниС, Ρ‡Ρ‚ΠΎ Π½Π° ноль Π΄Π΅Π»ΠΈΡ‚ΡŒ нСльзя

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β print(«Π”Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ноль!»)

Π¦ΠΈΠΊΠ» ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π² Python 3



Π― Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΈΠ·ΠΎ всСх сил ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ свой ΠΊΠΎΠ΄ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠ³ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π±Π΅Π· нСобходимости пСрСзапуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π― знаю, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚-Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ while loop, Π½ΠΎ Ρƒ мСня Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ этой стратСгии. Π― пытался ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ Π·Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это. Бпасибо.

print('Python Calculator Program')
print('         MENU')
print('1)Add')
print('2)Subtract')
print('3)Multiply')
print('4)Divide')
print('5)Square Root')
print('6)Exit')


print('Enter Your Choice:')
operator=input('Choose a number 1 - 6: ')


while True:
    if operator == '1' or operator == 'Add' or operator == 'add':
        a=float(input('Enter the fist number that you wish to add: '))
        b=float(input('Enter the second number that you wish to add: '))

        ans=sum(a,b)
        print('The sum of the numbers are: ', ans)

    elif operator == '2' or operator == 'Subtract' or operator == 'subtract':
        a=float(input('Enter the fist number that you wish to subtract: '))
        b=float(input('Enter the second number that you wish to subtract: '))

        ans=difference(a,b)
        print('The difference of the numbers are: ', ans)

    elif operator == '3' or operator == 'Multiply' or operator == 'multiply':
        a=float(input('Enter the fist number that you wish to multiply: '))
        b=float(input('Enter the second number that you wish to multiply: '))

        ans=product(a,b)
        print('The product of the numbers are: ', ans)

    elif operator == '4' or operator == 'Divide'  or operator == 'divide':
        a=float(input('Enter the dividend: '))
        b=float(input('Enter the divisor: '))

        ans=quotient(a,b)
        print('The quotient of the numbers are: ', ans)

    elif operator == '5' or operator == 'Square Root' or operator == 'sqaure root':
        a=float(input('Enter the number you wish to find the square root of: '))

        ans=sqrt(a)
        print('The square root of the number is: ', ans)

    elif operator =='6':
        print('CALCULATOR: ON [OFF]')
        break


    else:
        print('Enter the math operator as dislayed')
        operator=input('Choose an operator: ')





def sum(a,b):
    return a+b

def difference(a,b):
    return a-b

def product(a,b):
    return a*b

def quotient(a,b):
    return a/b

def sqrt(a):
    import math
    return(math.sqrt(a))

main()
python loops while-loop
ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ Ron Estrada Β  Β  13 фСвраля 2019 Π² 20:10

3 ΠΎΡ‚Π²Π΅Ρ‚Π°


  • Моя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π² Python позволяСт Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ символы

    Π― создал ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π² Python, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Tkinter, ΠΈ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ; Π½ΠΎ ΠΊΠΎΠ³Π΄Π° я Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ Π΅Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΆΠ°Ρ‚ΡŒ Π½Π° ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части ΠΌΠΎΠ΅Π³ΠΎ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° ΠΈ ввСсти символы. Π― написал ΠΊΠΎΠ΄ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° это происходит, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка, Π½ΠΎ эти символы всС Ρ€Π°Π²Π½ΠΎ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ. Π―…

  • Python ΠΊΠΎΠ΄ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

    НСдавно Ρƒ мСня появился raspberry pi, ΠΈ я ΡƒΡ‡ΡƒΡΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° python, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΅Π³ΠΎ. Π£ мСня Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ руководство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ raspberry, ΠΈ я ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽ сцСнарий ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°, Π½ΠΎ ΠΎΠ½ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ??? это ΠΌΠΎΠΉ сцСнарий; username = raw_input(What is your name? ) print (Welcome to…



1

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° ваш ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ вопрос, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ запрос ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄Π΅Π»Π°Π΅Ρ‚ Ρ†ΠΈΠΊΠ», поэтому Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ запрос Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°. Π― знаю, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, поэтому я нашСл врСмя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ваш ΠΊΠΎΠ΄ ΠΈ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ / ΠΏΡ€ΠΎΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹, надСюсь, ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ Π²Π΅Ρ‰ΠΈ Π±ΠΎΠ»Π΅Π΅ эффСктивно

import math

def sum(a,b): return a+b

def difference(a,b): return a-b

def product(a,b): return a*b

def quotient(a,b): return a/b

def sqrt(a): return(math.sqrt(a))

def selectMenu():
    print('Python Calculator Program')
    print('         MENU')
    print('1)Add')
    print('2)Subtract')
    print('3)Multiply')
    print('4)Divide')
    print('5)Square Root')
    print('6)Exit')
    print('Enter Your Choice:')
    return input('Choose a number 1 - 6: ')


def main():
ans = "" #declare ans because if we try to see if ans == "" and ans doesnt exist, the 
         #program will crash
operator = "" # "" is not 6, therefore the while loop will run at least once
while operator != '6': #as long as the variable operator is not 6  // operator != '6' 
                       #is your condition
    operator = selectMenu() #this will get the user's choice
    operation = "" #our placeholder for the operation string
    if operator == '1' or operator.lower() == 'add': #.lower() will convert the 
                                                     #entire string to lowercase, so 
                                                     #that you dont have to test for                                                          
                                                     #caps
        a=float(input('Enter the fist number that you wish to add: '))
        b=float(input('Enter the second number that you wish to add: '))
        operation = "sum"
        ans= sum(a,b)

    elif operator == '2' or operator.lower() == 'subtract':
        a=float(input('Enter the fist number that you wish to subtract: '))
        b=float(input('Enter the second number that you wish to subtract: '))
        operation = "difference"
        ans = difference(a, b)


    elif operator == '3' or operator.lower() == 'multiply':
        a=float(input('Enter the fist number that you wish to multiply: '))
        b=float(input('Enter the second number that you wish to multiply: '))
        operation = "product"
        ans=product(a,b)

    elif operator == '4' or operator.lower() == 'divide':
        a=float(input('Enter the dividend: '))
        b=float(input('Enter the divisor: '))
        operation = "quotient"
        ans=quotient(a,b)


    elif operator == '5' or operator.lower() == 'square root':
        a=float(input('Enter the number you wish to find the square root of: '))
        operation = "square root"
        ans=sqrt(a)

    elif operator =='6':
       print('CALCULATOR: ON [OFF]')
       operation = ""
       ans = ""
       #break // while break technically works, its a bad habit to get in to. your 
       #loops should naturally terminate themselves by causing the condition to 
       #become false

    else:
        print('Enter the math operator as displayed')

         if ans != "": # since we're always gonna print the answer no matter what 
                       #they pick, its easier to do it after your if statements.
             print() #print empty lines for spacing
             print("The ", operation, " is: ", ans)
             print()

 main()

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Grimmpier Β  Β  13 фСвраля 2019 Π² 21:06



1

Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ваш отступ ΠΊΠΎΠ΄Π° ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² вашСм постС, Π½ΠΎ я ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ просто Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ввСсти ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ†ΠΈΠΊΠ», ΠΈ Π² этом случаС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ свою строку ΠΊΠΎΠ΄Π°

while True:
    operator=input('Choose a number 1 - 6: ')
    if operator == '1' or operator == 'Add' or operator == 'add':
..... # all your other code

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Reedinationer Β  Β  13 фСвраля 2019 Π² 20:18



0

Π£ мСня Π±Ρ‹Π» ΠΊΠΎΠ΄, ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° Ρ‚ΠΎΡ‚, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

надСюсь, это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚

import math



def isfloat(value):
  """
    Checks if the given value represent float
  :param value:
  :return: True if float
  """
  try:
    float(value)
    return True
  except:
    return False



def chooseOperator(input):
    # Returns a method to run
    return {

        '1': oneAdd,
        'add': oneAdd,
        '2': twoDif,
        'subtract': twoDif,
        '3': threeMult,
        'multiply': threeMult,
        '4': fourDiv,
        'divide': fourDiv,
        '5': fiveSqrt,
        'sqaure root': fiveSqrt,
        '6': sixExit,
        'exit': sixExit

    }[input]


def printMenu():
    print('\n\t--  MENU  --')
    print('1)\t Add')
    print('2)\t Subtract')
    print('3)\t Multiply')
    print('4)\t Divide')
    print('5)\t Square Root')
    print('6)\t Exit')




def mainLoop():
    inputFromUser = True
    print('\n\n**   Python Calculator Program   **')
    print('CALCULATOR: [ON] OFF')


    while inputFromUser:
        # Prints the menu to the console
        printMenu()

        try:
            # operator is a function
            operator = chooseOperator((input('Choose an operator:  ')).lower())
            # inputFromUser is a boolean variable
            inputFromUser = operator()

        except KeyError:
            # Unknown input
            print('\n\t Please choose an operator from the menu')




def oneAdd():
    # Get input from user
    a = input('Enter the first number that you wish to add: ')
    b = input('Enter the second number that you wish to add: ')

    # Check that the input is valid
    if isfloat(a) and isfloat(b):
        # Calculate with values
        ans = float(a) + float(b)
        print('The sum of the numbers are: ', ans)


    else:
        # Notify the user that the values are not valid
        print("\tInvalid values:")
        print("\t\tfirst  = ", a)
        print("\t\tsecond = ", b)

    return True


def twoDif():
    # Get input from user
    a = input('Enter the first number that you wish to subtract: ')
    b = input('Enter the second number that you wish to subtract: ')

    # Check that the input is valid
    if isfloat(a) and isfloat(b):
        # Calculate with values
        ans = float(a) - float(b)
        print('The difference of the numbers are: ', ans)


    else:
        # Notify the user that the values are not valid
        print("\tInvalid values:")
        print("\t\tfirst  = ", a)
        print("\t\tsecond = ", b)


    return True


def threeMult():
    # Get input from user
    a = input('Enter the first number that you wish to multiply: ')
    b = input('Enter the second number that you wish to multiply: ')

    # Check that the input is valid
    if isfloat(a) and isfloat(b):
        # Calculate with values
        ans = float(a) * float(b)
        print('The product of the numbers are: ', ans)

    else:
        # Notify the user that the values are not valid
        print("\tInvalid values:")
        print("\t\tfirst  = ", a)
        print("\t\tsecond = ", b)

    return True


def fourDiv():
    # Get input from user
    a = input('Enter the dividend: ')
    b = input('Enter the divisor: ')

    # Check that the input is valid
    if isfloat(a) and isfloat(b):
        # Calculate with values
        ans = float(a) / float(b)
        print('The quotient of the numbers are: ', ans)

    else:
        # Notify the user that the values are not valid
        print("\tInvalid values:")
        print("\t\tfirst  = ", a)
        print("\t\tsecond = ", b)

    return True


def fiveSqrt():
    # Get input from user
    a = input('Enter the number you wish to find the square root of: ')

    # Check that the input is valid
    if isfloat(a):
        # Calculate with values
        ans = math.sqrt(float(a))
        print('The square root of the number is: ', ans)

    else:
        # Notify the user that the values are not valid
        print("\tInvalid value:")
        print("\t\tfirst  = ", a)

    return True


def sixExit():
    print('\n\nCALCULATOR: ON [OFF]')
    return False





if __name__ == '__main__':

    mainLoop()

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Yonatan Zax Β  Β  13 фСвраля 2019 Π² 21:24


  • Базовая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ оТидания Python

    loop = 1 choice = 0 #holds the user choice for menu while (loop == 1): print (Welcome to calci.py) print (your options are:) print ( ) print (1. Addition) print (2. Subtraction) print (3. Multiplication) print (4. Division) print (5. Quit calculator.py) print ( ) choice = input(Choose your option:…

  • Выпуск ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Ρ‡Π°Π΅Π²Ρ‹Ρ…

    ΠΏΡ‹Ρ‚Π°ΡΡΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ python для ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Ρ‡Π°Π΅Π²Ρ‹Ρ… Π½Π° основС сСрвиса, я столкнулся с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ с ΠΌΠΎΠΈΠΌ while loop. service = while service != excellent or service != good or service != bad: service = input((Please choose excellent, good, or bad): ) Π­Ρ‚Π° Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ бСсконСчный Ρ†ΠΈΠΊΠ», Π½ΠΎ я Π½Π΅…


ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ вопросы:


Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π² python

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я попытался ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот кусок ΠΊΠΎΠ΄Π° для создания ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π² python, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ я Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡Π°Π» ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ всСгда Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ я Π²Π²ΠΎΠΆΡƒ нСдопустимый Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, проходя…


Базовая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π² python

Π― Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ написал простой скрипт ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π² python, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, python Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚ΡŒ Π·Π½Π°ΠΊ ( — ) минус, (*) ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅, (/) Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½ΠΎ ΠΏΡ€ΠΈ рассмотрСнии этого скрипта ΠΎΠ½ Π½Π΅…


Π¦ΠΈΠΊΠ» ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π² Python

НуТно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ» Π² ΠΌΠΎΠΉ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€, прСдоставив ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€, помСстив ΠΊΠΎΠ΄ Π² while loop с условиСм, Ρ‡Ρ‚ΠΎ Π²Π²ΠΎΠ΄ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ‘y’ ΠΈΠ»ΠΈ ‘Y’. def…


Моя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π² Python позволяСт Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ символы

Π― создал ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π² Python, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Tkinter, ΠΈ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ; Π½ΠΎ ΠΊΠΎΠ³Π΄Π° я Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ Π΅Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΆΠ°Ρ‚ΡŒ Π½Π° ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части ΠΌΠΎΠ΅Π³ΠΎ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° ΠΈ ввСсти символы. Π―…


Python ΠΊΠΎΠ΄ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

НСдавно Ρƒ мСня появился raspberry pi, ΠΈ я ΡƒΡ‡ΡƒΡΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° python, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΅Π³ΠΎ. Π£ мСня Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ руководство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ raspberry, ΠΈ я ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽ сцСнарий ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°, Π½ΠΎ ΠΎΠ½ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½Π΅…


Базовая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ оТидания Python

loop = 1 choice = 0 #holds the user choice for menu while (loop == 1): print (Welcome to calci.py) print (your options are:) print ( ) print (1. Addition) print (2. Subtraction) print (3….


Выпуск ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Ρ‡Π°Π΅Π²Ρ‹Ρ…

ΠΏΡ‹Ρ‚Π°ΡΡΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ python для ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Ρ‡Π°Π΅Π²Ρ‹Ρ… Π½Π° основС сСрвиса, я столкнулся с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ с ΠΌΠΎΠΈΠΌ while loop. service = while service != excellent or service != good or service != bad: service…


Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ€Π΅ΠΆΠΈΠΌ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°?

Π― Π½Π΅ знаю ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π² Python, ΠΈ я помСстил Ρ‡Π°ΡΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π½ΠΈΠΆΠ΅. Если Π²Ρ‹ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚Π΅ ΠΈΠ· ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python ΠΈ снова Π²ΠΎΠΉΠ΄Π΅Ρ‚Π΅ Π² Π½Π΅Π³ΠΎ, сдСланныС Π²Π°ΠΌΠΈ опрСдСлСния (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ…


python 3 Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Π’ частности, я ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ Ρ‚ΠΈΠΏΠ°, которая Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ функция pow() Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ строки ΠΈΠ»ΠΈ Ρ†Π΅Π»Ρ‹Π΅ числа? Π― ΡΠ»Π΅Π΄ΡƒΡŽ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΌΡƒ символу для Ρ†Π΅Π»ΠΎΠ³ΠΎ числа с этого сайта…


Бамая короткая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π² python Π³ΠΎΠ΄Ρƒ

Π― довольно Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ python. Π― просмотрСл ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄ΠΎΠ² ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° python ΠΎΠ½Π»Π°ΠΉΠ½ ΠΈ задавался вопросом, Π΅ΡΡ‚ΡŒ Π»ΠΈ способ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС встроСнных арифмСтичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ…

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π’ Python

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² Python, ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ я Π½Π°Ρ‡Π°Π» Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π±Ρ‹Π» ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€. Основная Ρ‡Π°ΡΡ‚ΡŒ ΠΌΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π° Π½Π° ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Π²Π²ΠΎΠ΄Π°ΠΌ, Π½ΠΎ я пытался Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ способ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ/Π²Ρ‹Ρ‡Π΅ΡΡ‚ΡŒ/Ρ€Π°Π·ΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ/Π΄Π΅Π»ΠΈΡ‚ΡŒ большС, Ρ‡Π΅ΠΌ просто Π΄Π²Π° числа. Подобно Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ количСство Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΈΡ… Π² расчСт. На самом Π΄Π΅Π»Π΅ я просто ΠΈΡ‰Ρƒ Π»ΡŽΠ±Ρ‹Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ, Π΄Π°ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ слоТныС Π²Π΅Ρ‰ΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π΅. Π•ΡΡ‚ΡŒ прСдполоТСния?

def add(num1, num2):
return num1 + num2
def sub(num1, num2):
return num1 - num2
def mult(num1, num2):
return num1 * num2
def div(num1, num2):
return num1 / num2

def main():
operation = raw_input('\n' "What do you want to do? (+, -, *, /): ")

if (operation != '+' and operation != '-' and operation != '*' and operation != '/'):
print("Please enter a valid operation")
else:
while True:
try:
var1 = float(raw_input("Enter num1: "))
var2 = float(raw_input("Enter num2: "))
except ValueError:
print('\n' "Please enter numbers only")
continue
else:
break
print('\n' "The answer is:")
if(operation == '+'):
print(add(var1, var2))
if(operation == '-'):
print(sub(var1, var2))
if(operation == '*'):
print(mult(var1, var2))
if(operation == '/'):
try:
print(div(var1, var2))
except ZeroDivisionError:
print("Infinity!")
while True:
main()

Π’Ρ‹Π²ΠΎΠ΄:

Π§Ρ‚ΠΎ Ρ‚Ρ‹ Ρ…ΠΎΡ‡Π΅ΡˆΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ? (+, -, *,/): +

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ num1: 6

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ num2: 4

ΠžΡ‚Π²Π΅Ρ‚:

10,0

Π§Ρ‚ΠΎ Ρ‚Ρ‹ Ρ…ΠΎΡ‡Π΅ΡˆΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ? (+, -, *,/): r

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ

Π§Ρ‚ΠΎ Ρ‚Ρ‹ Ρ…ΠΎΡ‡Π΅ΡˆΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ? (+, -,/):

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ num1: 1

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ num2: e

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†ΠΈΡ„Ρ€Ρ‹

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ num1: t

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†ΠΈΡ„Ρ€Ρ‹

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ num1: 2.345

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ num2: 4.67

ΠžΡ‚Π²Π΅Ρ‚:

10,95115

Π§Ρ‚ΠΎ Ρ‚Ρ‹ Ρ…ΠΎΡ‡Π΅ΡˆΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ? (+, -, *,/): /

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ num1: 4

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ num2: 0

ΠžΡ‚Π²Π΅Ρ‚:

Π‘Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ!

Π§Ρ‚ΠΎ Ρ‚Ρ‹ Ρ…ΠΎΡ‡Π΅ΡˆΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ? (+, -, *,/):

Базовая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ с использованиСм Python

Β Β 

def add(num1, num2):

Β Β Β Β return num1 + num2

Β Β 

def subtract(num1, num2):

Β Β Β Β return num1 - num2

Β Β 

def multiply(num1, num2):

Β Β Β Β return num1 * num2

Β Β 

def divide(num1, num2):

Β Β Β Β return num1 / num2

Β Β 

print("Please select operation -\n" \

Β Β Β Β Β Β Β Β "1. Add\n" \

Β Β Β Β Β Β Β Β "2. Subtract\n" \

Β Β Β Β Β Β Β Β "3. Multiply\n" \

Β Β Β Β Β Β Β Β "4. Divide\n")

Β Β 

Β Β 

select = input("Select operations form 1, 2, 3, 4 :")

Β Β 

number_1 = int(input("Enter first number: "))

number_2 = int(input("Enter second number: "))

Β Β 

if select == '1':

Β Β Β Β print(number_1, "+", number_2, "=",

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β add(number_1, number_2))

Β Β 

elif select == '2':

Β Β Β Β print(number_1, "-", number_2, "=",

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β subtract(number_1, number_2))

Β Β 

elif select == '3':

Β Β Β Β print(number_1, "*", number_2, "=",

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β multiply(number_1, number_2))

Β Β 

elif select == '4':

Β Β Β Β print(number_1, "/", number_2, "=",

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β divide(number_1, number_2))

else:

Β Β Β Β print("Invalid input")

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ Π½Π° ΠŸΠΈΡ‚ΠΎΠ½Π΅?

ВсСм Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ программистам хочСтся послС прохоТдСния Π²Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ курса ΠΏΠΎ языку программирования ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ сСбя Π² создании Ρ‡Π΅Π³ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ практичСски ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ. ΠœΡ‹ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ Π²Π°ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΡ‹Ρ‚Π°Ρ‚ΡŒ Π² дСйствии самый настоящий ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€, созданный Π·Π° нСсколько ΠΌΠΈΠ½ΡƒΡ‚ Π½Π° ЯП ΠŸΠΈΡ‚ΠΎΠ½.


Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ простой ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ считываСт ΠΈΠ· строки Π²Π²ΠΎΠ΄Π° Ρ‚Ρ€ΠΈ строки: 1-ΠΎΠ΅ число, 2-ΠΎΠ΅ число ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, послС Ρ‡Π΅Π³ΠΎ примСняСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΊ Π²Π²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΌ числам («ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число» «ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ» «Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число»), Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π° экран.


ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ: +, -, /, *, mod, pow, div

,Π³Π΄Π΅

  • mod β€” это взятиС остатка ΠΎΡ‚ дСлСния,
  • pow β€” Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ,
  • div β€” цСлочислСнноС Π΄Π΅Π»Π΅Π½ΠΈΠ΅.

Если выполняСтся Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число Ρ€Π°Π²Π½ΠΎ 0, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ строку «Π”Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° 0!».

На Π²Ρ…ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π°Π²Π°Ρ‚ΡŒ вСщСствСнныС числа!

Код ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€

x=float(input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ x ="))
y=float(input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ y ="))
z=input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ (+, -, /, *, mod, pow, div) =")
if z==+:
result=x+y
elif z==-:
result=x-y
elif z==pow:
result=pow(x,y)
elif z==*:
result=x*y
elif y!=0:
if z==/:
result=x/y
elif z==div:
result=x//y
elif z==mod:
result=x%y
elif y==0:
result="Π”Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° 0!"
print("Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вычислСний =",result)

ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ создания подуровня для ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² вСтвлСния обусловлСна Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ всС вычислСния, связанныС с Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ, Ссли Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ.

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ записано Π² послСдних строчках ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

elif y==0:  
result="Π”Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° 0!"

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² вычислСний ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Python 3.5.2 (default, Dec 2015, 13:05:11)
[GCC 4.8.2] on linux

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ x = 12
Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ y = 12
Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ (+, -, /, *, mod, pow, div) = pow
Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вычислСний = 8916100448256


Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹ Π½Π° ΠŸΠΈΡ‚ΠΎΠ½Π΅. Β«Π£Π³Π°Π΄Π°ΠΉ число»

Базовая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° с использованиСм Python

ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ (число1, число2):

Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ число1 + число2

ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ (число1, число2):

Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ число1 - число2

ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ (число1, число2):

Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ число1 * число2

ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (число1, число2):

Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ число1 / число2

ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ ( "Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ - \ n" \

"1.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ \ n " \

"2. Π’Ρ‹Ρ‡Π΅ΡΡ‚ΡŒ \ n" \

"3. Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ \ n" \

"4. Π Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ \ n" )

Π²Ρ‹Π±ΠΎΡ€ = int ( Π²Ρ…ΠΎΠ΄ ( "Π’Ρ‹Π±ΠΎΡ€ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ 1, 2, 3, 4:" ))

число_1 = int ( Π²Π²ΠΎΠ΄ ( "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число:" ))

число_2 = int ( Π²Π²ΠΎΠ΄ ( "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число:" ))

Ссли Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ = = 1 :

ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (число_1, "+" , число_2, "=" ,

Π΄ΠΎΠ±. (Число_1, число_2))

elif Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ = = 2 :

ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (число_1, "-" , число_2, "=" ,

Π²Ρ‹Ρ‡Π΅ΡΡ‚ΡŒ (число_1, число_2))

elif Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ = = 3 :

ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (число_1, "*" , число_2, "=" ,

ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ (число_1, число_2))

elif Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ = = 4 :

ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (число_1, "/" , число_2, "=" ,

Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ (число_1, число_2))

Π΅Ρ‰Π΅ :

ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ ( Β«ΠΠ΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Π²ΠΎΠ΄Β» )

3 способа Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ Π½Π° Python | Π”ΠΆΠ΅ΠΉΠΌΠΈ Π‘Π°Π»Π»ΠΎΠΊ

ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Ρ‹ Python: Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ ΠΈ ΠΏΠ»ΠΎΡ…ΠΎΠ΅.ΠΈ ΡƒΡ€ΠΎΠ΄Π»ΠΈΠ²Ρ‹ΠΉ

Π€ΠΎΡ‚ΠΎ StellrWeb Π½Π° Unsplash

Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ, согласно Π”Π°ΠΎ Python, для любой ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ:

Π”ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ — ΠΈ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ — ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это

Однако Π² случаС Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ-ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€, Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… способов ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это. Какой ΠΈΠ· Π½ΠΈΡ… Β«Π»ΡƒΡ‡ΡˆΠΈΠΉΒ», Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ зависит ΠΎΡ‚ контСкста.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΎΠ±Ρ‰ΠΈΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΈ слабыС стороны ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ….

РСшСниС 1. УсловноС Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅

Π― ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ, Ρ‡Ρ‚ΠΎ Ссли Π±Ρ‹ сущСствовал СдинствСнный Β«ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉΒ» способ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ Π½Π° Python, это Π±Ρ‹Π»ΠΎ Π±Ρ‹ использованиС условного вСтвлСния.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ шаги:

  1. Π‘ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎ Π²Π²ΠΎΠ΄Π΅
  2. Условно Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π½Π° основС Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°
  3. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ расчСт с использованиСм Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°
  4. Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

Код Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ :

Π’ этом ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ, ΠΈ Π½Π° самом Π΄Π΅Π»Π΅ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ руководств ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Π³ΠΎ Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ.Но ΠΊ нСдостаткам ΠΌΠΎΠΆΠ½ΠΎ отнСсти:

Π’ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Π΅Π³ΠΎ Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

Π’ΠΎΡ‚ ссылка Π½Π° Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠΎΠ΄.

РСшСниС 2: eval ()

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Π² Python Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ eval () . eval позволяСт ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ строку ΠΊΠ°ΠΊ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Python. Π­Ρ‚ΠΎ нСвСроятно ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ позволяСт динамичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠ΄ Π²ΠΎ врСмя выполнСния.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ это, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π΄ΠΎ:

 calc = input ("РасчСт Ρ‚ΠΈΠΏΠ°: \ n") 

print ("ΠžΡ‚Π²Π΅Ρ‚:" + str (eval (calc)))

eval () ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСимущСства ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ 1:

  • Он ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ выраТСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,Π³Ρ€Π°ΠΌΠΌ. 1 + 2-3 * 4 ) Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ
  • Π—Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ мСньшС ΠΊΠΎΠ΄Π°

Π’ΠΎΡ‚ ссылка Π½Π° Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠΎΠ΄.

eval ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Β«ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ способом», Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ локально Π½Π° своСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π΅Π½ ΠΈ эффСктивСн. Однако Π΅Π³ΠΎ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с большой ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π² производствСнной срСдС. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ eval ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ выраТСния Python, поэтому Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½Π½Ρ‹Ρ… цСлях.

Π₯ΠΎΡ€ΠΎΡˆΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΎ рисках бСзопасности eval ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь.

РСшСниС 3. Поиск ΠΏΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ ΠΈ рСкурсия

Π’ этой вСрсии ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Python ΠΌΡ‹ сдСлаСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ 1:

  • Поиск ΠΏΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ условного вСтвлСния. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ чистым, Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ.
  • ΠœΠΎΠ΄ΡƒΠ»ΡŒ Python operator ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вмСсто опрСдСлСния Π½Π°ΡˆΠΈΡ… собствСнных матСматичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.
  • РСкурсия ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ слоТных матСматичСских Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ)

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΊΠΎΠ΄ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ эффСктивСн, Ρ‡Π΅ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ 1, ΠΈ Π±ΠΎΠ»Π΅Π΅ бСзопасСн, Ρ‡Π΅ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ 2.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚Π°ΠΊΠΎΠ²: ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ строку (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 1 + 2 * 3), наша функция calculate () выполняСт ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π² словарС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² , ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π·Π΄Π΅Π» строки. ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ появлСнии этого ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°. Π’ случаС 1 + 2 * 3 это даст Π½Π°ΠΌ:

 left = '1' 
operator = '+'
right = '2 * 3'

calculate () Π·Π°Ρ‚Π΅ΠΌ вызываСтся рСкурсивно Π½Π° подвыраТСния Π΄ΠΎ с.isdigit () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ истину. Π˜Ρ‚Π°ΠΊ, Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ наш рСкурсивный Π²Ρ‹Π·ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

 ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ['+'] (Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ('1'), Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ('2 * 3')) 

Π§Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚:

 return add (1, 6) 

Если Π±Ρ‹ я писал Β«Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉΒ» ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ Π½Π° Python, я Π±Ρ‹ взял Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ этого Π² качСствС ΠΎΡ‚ΠΏΡ€Π°Π²Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ.

Π’ΠΎΡ‚ ссылка Π½Π° Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠΎΠ΄.

БонусноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: элСктронный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ!

ПослСдний «бонусный» ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΠΎΠΉ Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ - это использованиС прСвосходного элСктронного модуля.Благодаря этому ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ выраТСния Python Β«Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽΒ» ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки , Π½Π΅ открывая ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python .

Для установки:

 pip install e 

Π—Π°Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ просто Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

 $ python -me 1 + 1 
2 $ python -me "10 * 5 - (6 ** 2) + 6 / 3 "
16

ΠžΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ!

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π½Π° Python - AskPython

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python

- ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ инструмСнт для ΠΎΡ†Π΅Π½ΠΊΠΈ ΠΈ выполнСния манипуляций. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠΌ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ-ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Π½Π° Python 3.

Π’ нашСм ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ матСматичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, условныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°.

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ трСбования

Π’ систСмС Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ установлСн Python 3 Π½Π° локальном ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΈ Π½Π° Π½Π΅ΠΌ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ настроСна срСда программирования.


ΠŸΡ€ΠΈΠ½ΡΡ‚ΡŒ / Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Π²Π²ΠΎΠ΄ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π²Π²ΠΎΠ΄ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Для этой Ρ†Π΅Π»ΠΈ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Python input (). Π’ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΡ‹ позволяСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Π²Π° числа, поэтому Π΄Π°Π²Π°ΠΉΡ‚Π΅ возьмСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для подсказки Π΄Π²ΡƒΡ… чисСл.

num_1 = input ('Π’Π²Π΅Π΄ΠΈΡ‚Π΅ свой ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€:')
num_2 = input ('Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число:')
 

Π’Ρ‹Ρ…ΠΎΠ΄ :

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ свой ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€: 10
Π’Π²Π΅Π΄ΠΈΡ‚Π΅ свой Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π½ΠΎΠΌΠ΅Ρ€: 5
 

ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π΅ запуском. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ тСкст Π² ΠΎΠΊΠ½Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅.


ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² Π½Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠ°ΠΊ слоТСниС, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅.

num_1 = int (input ('Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число:'))
num_2 = int (input ('Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число:'))

# Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅
print ('{} + {} =' .format (число_1, число_2))
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (число_1 + число_2)

# Π’Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅
print ('{} - {} =' .format (число_1, число_2))
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (число_1 - число_2)

# Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅
print ('{} * {} =' .format (число_1, число_2))
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (число_1 * число_2)

# Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅
print ('{} / {} =' .format (число_1, число_2))
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (число_1 / число_2)
# Π€ΠΎΡ€ΠΌΠ°Ρ‚ () ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ внСшний Π²ΠΈΠ΄ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ Π΅Π³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.
 

Π’Ρ‹Ρ…ΠΎΠ΄ :

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ свой ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€: 15
Π’Π²Π΅Π΄ΠΈΡ‚Π΅ вашС Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число: 10
15 + 10 =
25
15 - 10 =
05
15 * 10 =
150
15/10 =
1.5
 

Если Π²Ρ‹ посмотритС Π½Π° Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ num_1 ΠΊΠ°ΠΊ 15 ΠΈ num_2 ΠΊΠ°ΠΊ 10 , всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ.

Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° Ρ€Π°Π·, Π½Π°ΠΌ придСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ условныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ всю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π° основС Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.


Π’ΠΊΠ»ΡŽΡ‡Π°Ρ условиС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±Ρ‹Π»Π° Π²Ρ‹Π±Ρ€Π°Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с добавлСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ вмСстС с Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ понял, Ρ‡Ρ‚ΠΎ ΠΎΠ½ / ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ.

Π²Ρ‹Π±ΠΎΡ€ = Π²Ρ…ΠΎΠ΄ ('' '
ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ‚ΠΈΠΏ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ:
+ для слоТСния
- Π½Π° Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅
* для умноТСния
/ для дСлСния
'' ')

num_1 = int (input ('Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число:'))
num_2 = int (input ('Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число:'))

Ссли Π²Ρ‹Π±ΠΎΡ€ == '+':
    print ('{} + {} =' .format (число_1, число_2))
    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (число_1 + число_2)

elif choice == '-':
    print ('{} - {} =' .format (число_1, число_2))
    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (число_1 - число_2)

elif choice == '*':
    print ('{} * {} =' .format (число_1, число_2))
    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (число_1 * число_2)

elif choice == '/':
    print ('{} / {} ='.Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (число_1, число_2))
    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (число_1 / число_2)

Π΅Ρ‰Π΅:
    print ('Π’Π²Π΅Π΄ΠΈΡ‚Π΅ допустимый ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, запуститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π΅Ρ‰Π΅ Ρ€Π°Π·.')
 

Π’Ρ‹Ρ…ΠΎΠ΄ :

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ‚ΠΈΠΏ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ:
+ для слоТСния
- Π½Π° Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅
* для умноТСния
/ для дСлСния

*

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число: 10
ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число: 40
10 * 40 =
400
 

Бписок Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ простой ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ с использованиСм Python

Π’ этом руководствС я ΠΏΠΎΠΊΠ°ΠΆΡƒ Π²Π°ΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ простой ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ с использованиСм Python.

Для Π½Π°Ρ‡Π°Π»Π° подСлюсь исходным ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ сразу смоТСтС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π—Π°Ρ‚Π΅ΠΌ я ΠΏΡ€ΠΎΠ²Π΅Π΄Ρƒ Π±Ρ‹ΡΡ‚Ρ€ΡƒΡŽ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ, Π° Π·Π°Ρ‚Π΅ΠΌ объясню ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ использовался Π² ΠΊΠΎΠ΄Π΅ для создания ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π½Π° Python.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€:

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ для создания ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° с использованиСм Python

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π² Python, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€:

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ tkinter as tk

ΠΊΠΎΡ€Π΅Π½ΡŒ = Ρ‚ΠΊ.Π’ΠΊ ()

canvas1 = tk.Canvas (ΠΊΠΎΡ€Π΅Π½ΡŒ, ΡˆΠΈΡ€ΠΈΠ½Π° = 300, высота = 300)
canvas1.pack ()

entry1 = tk.Entry (ΠΊΠΎΡ€Π΅Π½ΡŒ)
canvas1.create_window (210, 100, окно = запись1)

entry2 = tk.Entry (ΠΊΠΎΡ€Π΅Π½ΡŒ)
canvas1.create_window (210, 140, окно = запись2)

entry3 = tk.Entry (ΠΊΠΎΡ€Π΅Π½ΡŒ)
canvas1.create_window (210, 240, окно = запись3)

label0 = tk.Label (ΠΊΠΎΡ€Π΅Π½ΡŒ, тСкст = 'ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€')
label0.config (font = ('helvetica', 14))
canvas1.create_window (150, 40, ΠΎΠΊΠ½ΠΎ = label0)

label1 = tk.ΠœΠ΅Ρ‚ΠΊΠ° (ΠΊΠΎΡ€Π΅Π½ΡŒ, тСкст = 'Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° 1:')
label1.config (font = ('helvetica', 10))
canvas1.create_window (100, 100, ΠΎΠΊΠ½ΠΎ = label1)

label2 = tk.Label (root, text = 'Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° 2:')
label2.config (font = ('helvetica', 10))
canvas1.create_window (100, 140, ΠΎΠΊΠ½ΠΎ = label2)

label3 = tk.Label (root, text = 'Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:')
label3.config (font = ('helvetica', 10))
canvas1.create_window (100, 240, ΠΎΠΊΠ½ΠΎ = label3)

def add ():
    v1 = entry1.get ()
    v2 = entry2.get ()
  
    label4 = tk.ΠœΠ΅Ρ‚ΠΊΠ° (ΠΊΠΎΡ€Π΅Π½ΡŒ, тСкст = float (v1) + float (v2), font = ('helvetica', 10, 'bold'), bg = 'white')
    canvas1.create_window (210, 240, ΠΎΠΊΠ½ΠΎ = label4)
      
buttonAdd = tk.Button (text = '+', command = add, bg = 'green', fg = 'white', font = ('helvetica', 9, 'ΠΆΠΈΡ€Π½Ρ‹ΠΉ'), width = 5)
canvas1.create_window (90, 190, ΠΎΠΊΠ½ΠΎ = buttonAdd)

def sub ():
    v1 = entry1.get ()
    v2 = entry2.get ()
  
    label5 = tk.Label (root, text = float (v1) -float (v2), font = ('helvetica', 10, 'bold'), bg = 'white')
    холст1.create_window (210, 240, ΠΎΠΊΠ½ΠΎ = label5)
      
buttonSub = tk.Button (text = '-', command = sub, bg = 'green', fg = 'white', font = ('helvetica', 9, 'bold'), width = 5).
canvas1.create_window (140, 190, ΠΎΠΊΠ½ΠΎ = buttonSub)

def mul ():
    v1 = entry1.get ()
    v2 = entry2.get ()
  
    label6 = tk.Label (root, text = float (v1) * float (v2), font = ('helvetica', 10, 'bold'), bg = 'white')
    canvas1.create_window (210, 240, ΠΎΠΊΠ½ΠΎ = label6)
      
buttonMul = tk.Button (text = 'x', command = mul, bg = 'green', fg = 'white', font = ('helvetica', 9, 'ΠΆΠΈΡ€Π½Ρ‹ΠΉ'), width = 5)
холст1.create_window (190, 190, ΠΎΠΊΠ½ΠΎ = buttonMul)

def div ():
    v1 = entry1.get ()
    v2 = entry2.get ()
  
    label7 = tk.Label (ΠΊΠΎΡ€Π΅Π½ΡŒ, тСкст = float (v1) / float (v2), font = ('helvetica', 10, 'bold'), bg = 'white')
    canvas1.create_window (210, 240, ΠΎΠΊΠ½ΠΎ = label7)
      
buttonDiv = tk.Button (text = '/', command = div, bg = 'green', fg = 'white', font = ('helvetica', 9, 'bold'), width = 5).
canvas1.create_window (240, 190, ΠΎΠΊΠ½ΠΎ = buttonDiv)

root.mainloop ()
 

ИспользованиС ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π² Python

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ экран:

Допустим, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСния 4 ΠΈ 3.Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ввСсти эти значСния Π² поля Π²Π²ΠΎΠ΄Π°, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«+Β», Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ эти значСния:

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ 7 . Π§Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ являСтся суммой 4 ΠΈ 3:

И Ссли Π²Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚Π΅ вмСсто этого ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ эти значСния, просто Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Β«xΒ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ значСния, ΠΈ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ 12 :

Π’ послСднСм Ρ€Π°Π·Π΄Π΅Π»Π΅ я объясню ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ использовался Π² ΠΊΠΎΠ΄Π΅.

Как ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ Π½Π° Python

Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ tkinter ΠΈ создайтС Canvas

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ tkinter .ΠŸΠ°ΠΊΠ΅Ρ‚ tkinter ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для создания графичСского интСрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (GUI) Π² Python.

Π’Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ потрСбуСтся Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ холст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся вашим графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ элСмСнты, ΠΊΠ°ΠΊ ΠΊΠ½ΠΎΠΏΠΊΠΈ, поля Π²Π²ΠΎΠ΄Π° ΠΈ Ρ‚. Π”.

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ tkinter as tk

ΠΊΠΎΡ€Π΅Π½ΡŒ = tk.Tk ()

canvas1 = tk.Canvas (ΠΊΠΎΡ€Π΅Π½ΡŒ, ΡˆΠΈΡ€ΠΈΠ½Π° = 300, высота = 300)
canvas1.pack ()
 

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ поля Π²Π²ΠΎΠ΄Π°

Π—Π°Ρ‚Π΅ΠΌ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ поля Π²Π²ΠΎΠ΄Π° для сбора Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° поля Π²Π²ΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для сбора значСния 1 ΠΈ значСния 2. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ, Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вычислСния.

 entry1 = tk.Entry (ΠΊΠΎΡ€Π΅Π½ΡŒ)
canvas1.create_window (210, 100, окно = запись1)

entry2 = tk.Entry (ΠΊΠΎΡ€Π΅Π½ΡŒ)
canvas1.create_window (210, 140, окно = запись2)

entry3 = tk.Entry (ΠΊΠΎΡ€Π΅Π½ΡŒ)
canvas1.create_window (210, 240, окно = запись3)
 

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ

Π’ настоящСС врСмя Π² графичСском интСрфСйсС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ 4 ΠΌΠ΅Ρ‚ΠΊΠΈ:

  • ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€
  • Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° 1:
  • Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° 2:
  • Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ тСкст, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈ / ΠΈΠ»ΠΈ мСсто, Π³Π΄Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ надписи.

 label0 = tk.Label (root, text = 'Calculator')
label0.config (font = ('helvetica', 14))
canvas1.create_window (150, 40, ΠΎΠΊΠ½ΠΎ = label0)

label1 = tk.Label (root, text = 'Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° 1:')
label1.config (font = ('helvetica', 10))
canvas1.create_window (100, 100, ΠΎΠΊΠ½ΠΎ = label1)

label2 = tk.Label (root, text = 'Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° 2:')
label2.config (font = ('helvetica', 10))
canvas1.create_window (100, 140, ΠΎΠΊΠ½ΠΎ = label2)

label3 = tk.Label (root, text = 'Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:')
label3.config (font = ('helvetica', 10))
canvas1.create_window (100, 240, ΠΎΠΊΠ½ΠΎ = label3)
 

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ

Π’ ΠΊΠΎΠ΄Π΅ 4 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  • Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ - для слоТСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
  • sub - для вычитания Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
  • mul - для умноТСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
  • div - для раздСлСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· этих 4 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΅ΡΡ‚ΡŒ связанная ΠΊΠ½ΠΎΠΏΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для запуска Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.НапримСр, Β«buttonAddΒ» Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ для добавлСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²Π΅Π» Π² поля Π²Π²ΠΎΠ΄Π°.

 def add ():
    v1 = entry1.get ()
    v2 = entry2.get ()
  
    label4 = tk.Label (ΠΊΠΎΡ€Π΅Π½ΡŒ, тСкст = float (v1) + float (v2), font = ('helvetica', 10, 'bold'), bg = 'white')
    canvas1.create_window (210, 240, ΠΎΠΊΠ½ΠΎ = label4)
      
buttonAdd = tk.Button (text = '+', command = add, bg = 'green', fg = 'white', font = ('helvetica', 9, 'ΠΆΠΈΡ€Π½Ρ‹ΠΉ'), width = 5)
холст1.create_window (90, 190, ΠΎΠΊΠ½ΠΎ = buttonAdd)

def sub ():
    v1 = entry1.get ()
    v2 = entry2.get ()
  
    label5 = tk.Label (root, text = float (v1) -float (v2), font = ('helvetica', 10, 'bold'), bg = 'white')
    canvas1.create_window (210, 240, ΠΎΠΊΠ½ΠΎ = label5)
      
buttonSub = tk.Button (text = '-', command = sub, bg = 'green', fg = 'white', font = ('helvetica', 9, 'bold'), width = 5).
canvas1.create_window (140, 190, ΠΎΠΊΠ½ΠΎ = buttonSub)

def mul ():
    v1 = запись1.ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ()
    v2 = entry2.get ()
  
    label6 = tk.Label (root, text = float (v1) * float (v2), font = ('helvetica', 10, 'bold'), bg = 'white')
    canvas1.create_window (210, 240, ΠΎΠΊΠ½ΠΎ = label6)
      
buttonMul = tk.Button (text = 'x', command = mul, bg = 'green', fg = 'white', font = ('helvetica', 9, 'ΠΆΠΈΡ€Π½Ρ‹ΠΉ'), width = 5)
canvas1.create_window (190, 190, ΠΎΠΊΠ½ΠΎ = buttonMul)

def div ():
    v1 = entry1.get ()
    v2 = entry2.get ()
  
    label7 = tk.Label (ΠΊΠΎΡ€Π΅Π½ΡŒ, тСкст = float (v1) / float (v2), font = ('helvetica', 10, 'bold'), bg = 'white')
    холст1.create_window (210, 240, ΠΎΠΊΠ½ΠΎ = label7)
      
buttonDiv = tk.Button (text = '/', command = div, bg = 'green', fg = 'white', font = ('helvetica', 9, 'bold'), width = 5).
canvas1.create_window (240, 190, ΠΎΠΊΠ½ΠΎ = buttonDiv)

root.mainloop ()
 

НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ root.mainloop () Π² ΠΊΠΎΠ½Ρ†Π΅.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Python для создания простого ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ простой ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ, Π²Ρ‹Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΡƒΠΌΠ½ΠΎΠΆΠ°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² зависимости ΠΎΡ‚ Π²Π²ΠΎΠ΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅ΠΌΡ‹ программирования Python:

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python
АргумСнты Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Python
ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄: ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Caculator ΠΏΡƒΡ‚Π΅ΠΌ создания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

# ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄Π΅Π»Π°Π΅Ρ‚ простой ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ которая ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ, Π²Ρ‹Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΡƒΠΌΠ½ΠΎΠΆΠ°Ρ‚ΡŒ ΠΈ Π΄Π΅Π»ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

# Π­Ρ‚Π° функция складываСт Π΄Π²Π° числа
def add (x, y):
return x + y

# Π­Ρ‚Π° функция Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π΄Π²Π° числа
def subtract (x, y):
return x - y

# Π­Ρ‚Π° функция ΡƒΠΌΠ½ΠΎΠΆΠ°Π΅Ρ‚ Π΄Π²Π° числа
def multiply (x, y):
return x * y

# Π­Ρ‚Π° функция Π΄Π΅Π»ΠΈΡ‚ Π΄Π²Π° числа
def div (x, y):
return x / y

print (Β«Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ.")
print (" 1.Add ")
print (" 2.Subtract ")
print (" 3.Multiply ")
print (" 4.Divide ")

# ΠŸΡ€ΠΈΠ½ΡΡ‚ΡŒ Π²Π²ΠΎΠ΄ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
choice = input ("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‹Π±ΠΎΡ€ (1/2/3/4):")

num1 = int (input ("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число:"))
num2 = int (input ("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число:"))

Ссли choice == '1':
print (num1, "+", num2, "=", add (num1, num2))

elif choice == '2':
print (num1, "-", num2, "=", Π²Ρ‹Ρ‡Π΅ΡΡ‚ΡŒ (num1, num2))

elif choice == '3':
print (num1, "*", num2, "=", multiply (num1, num2))

elif choice == ' 4 ':
print (num1, "/", num2, "=", div (num1, num2))
else:
print ("НСдопустимый Π²Π²ΠΎΠ΄")

Π’Ρ‹Π²ΠΎΠ΄

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ.
1. Π‘Π»ΠΎΠΆΠΈΡ‚ΡŒ
2. Π’Ρ‹Ρ‡Π΅ΡΡ‚ΡŒ
3. Π£ΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ
4. Π Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ
Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‹Π±ΠΎΡ€ (1/2/3/4): 3
Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число: 15
Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число: 14
15 * 14 = 210

Π’ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΡ‹ просим ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΆΠ΅Π»Π°Π΅ΠΌΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ 1, 2, 3 ΠΈ 4. БСрутся Π΄Π²Π° числа, ΠΈ Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ if ... elif ... else ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для выполнСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ add (), subtract (), multiply () ΠΈ diver () ΠΎΡ†Π΅Π½ΠΈΠ²Π°ΡŽΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ - ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ Π½Π° Python

Для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° это Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ.Но с этим связаны Ρ‚Ρ€ΠΈ Π²ΠΎΠΏΠΈΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

  1. Π’Π°ΠΌ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«Π³Π»Π°Π²Π½ΡƒΡŽΒ» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.
  2. Π’Π°ΠΌ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ.
  3. ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°

Начиная с (2), ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ содСрТит ΠΏΠ°Ρ€Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π°. Если Π²Ρ‹ встрСчали списки / массивы, это ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Π½ΠΈΡ…, ΠΏΠΎΠΌΠΈΠΌΠΎ этого Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†Π΅Π»Ρ‹Π΅ числа.

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ довольно просто, ΠΈ Π΅Π³ΠΎ использованиС ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ объСм ΠΊΠΎΠ΄Π°.

  ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² = {
    "+": Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ,
    "-": sub,
    "*": ΠΌΡƒΠ»ΡŒ,
    "/": div,
    "pow": pow
}
  

Π­Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ для хранСния всСх ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.Π’Π΅ΠΏΠ΅Ρ€ΡŒ всС, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ . ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ , это просто.

  func = operator.get (ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, НСт)
Ссли func Ρ€Π°Π²Π½ΠΎ None:
    print ("НСвСрный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€!")
    ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ
  

ΠšΡ€Π°ΡΠΈΠ²ΠΎ ΠΈ просто.

Основная функция проста, просто пСрСмСститС всС Π² , Ссли __name__ == '__main__': Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Π‘ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π²Π°ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ мСньшиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΈΠ΄Π΅Π΅ΠΉ, созданиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для получСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΈΠ΄Π΅Π΅ΠΉ.Но Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π°ΠΌ. Если Π±Ρ‹ Π²Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ Ρ‚ΠΎ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅, Π²Ρ‹ Π±Ρ‹ сдСлали Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅:

  def main ():
    Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ True:
        число1, число2, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ = get_user_input ()
        func = operator.get (ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, НСт)
        Ссли func Ρ€Π°Π²Π½ΠΎ None:
            print ("НСвСрный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€!")
            ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ

        print (func (число1; число2))

Ссли __name__ == '__main__':
    Π³Π»Π°Π²Π½Ρ‹ΠΉ()
  

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ get_user_input .

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС ваши опрСдСлСния , Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ , sub ΠΈ Ρ‚. Π”. И ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π½Π°:

  ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°

ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ = {
    Β«+Β»: operator.add,
    Β«-Β»: operator.sub,
    "*": operator.mul,
    "/": operator.truediv,
    "pow": operator.pow
}
  

БущСствуСт нСкоторая история раздСлСния Python, ΠΈ поэтому ΠΎΠ½ΠΎ называСтся truediv , Π½ΠΎ Ссли Π²Ρ‹ Π½Π΅ использовали ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Python2, Π²Π°ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ± этом Π·Π½Π°Ρ‚ΡŒ.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ - Real Python

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π΅Π±-прилоТСния ΠΈ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ прилоТСния, каТСтся, ΠΎΠ±Π³ΠΎΠ½ΡΡŽΡ‚ Ρ€Ρ‹Π½ΠΎΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, всС Π΅Ρ‰Π΅ сущСствуСт спрос Π½Π° Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Π΅ прилоТСния с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (GUI) . Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ заинтСрСсованы Π² создании ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π½Π° Python, Π΅ΡΡ‚ΡŒ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ Π²Ρ‹Π±ΠΎΡ€ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Tkinter, wxPython, PyQt, PySide2 ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. Π’ этом руководствС Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Π΅ прилоТСния с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python ΠΈ PyQt .

Π’ этом руководствС Π²Ρ‹ создадитС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ с Python ΠΈ PyQt. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ основы ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π² этом руководствС, Ρ‰Π΅Π»ΠΊΠ½ΡƒΠ² ссылку Π½ΠΈΠΆΠ΅:

ПониманиС PyQt

PyQt - это привязка Python для Qt , которая прСдставляСт собой Π½Π°Π±ΠΎΡ€ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ C ++ ΠΈ инструмСнтов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎ-нСзависимыС абстракции для графичСских ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… интСрфСйсов (GUI), Π° Ρ‚Π°ΠΊΠΆΠ΅ сСти, ΠΏΠΎΡ‚ΠΎΠΊΠΈ, рСгулярныС выраТСния, Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… SQL, SVG, OpenGL, XML ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΎΡ‰Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.PyQt, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ RiverBank Computing Ltd, доступСн Π² Π΄Π²ΡƒΡ… рСдакциях:

.
  1. PyQt4: выпуск, созданный для Qt 4.x ΠΈ 5.x
  2. PyQt5: выпуск, созданный Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Qt 5.x

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ PyQt4 ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ построСн ΠΏΡ€ΠΎΡ‚ΠΈΠ² Qt 5.x, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСбольшоС подмноТСство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ совмСстимо с Qt 4.x. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ PyQt4, Ρ‚ΠΎ, вСроятно, упуститС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Π² PyQt5.Π‘ΠΌ. Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ PyQt4 для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎ этой Ρ‚Π΅ΠΌΠ΅.

Π’ этом руководствС Π²Ρ‹ расскаТСтС ΠΎ PyQt5, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ, ΠΏΠΎΡ…ΠΎΠΆΠ΅, это Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π‘ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ любоС ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ PyQt ΠΊΠ°ΠΊ ссылку Π½Π° PyQt5.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π³Π»ΡƒΠ±ΠΆΠ΅ ΠΏΠΎΠ³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΡΡ Π² различия ΠΌΠ΅ΠΆΠ΄Ρƒ двумя вСрсиями Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ страницу Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ PyQt5.

PyQt5 основан Π½Π° Qt v5 ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ графичСскиС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ интСрфСйсы, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ XML, сСтСвоС взаимодСйствиС, рСгулярныС выраТСния, ΠΏΠΎΡ‚ΠΎΠΊΠΈ, Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… SQL, ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΠ°, просмотр Π²Π΅Π±-страниц ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, доступныС Π² Qt.PyQt5 Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ тысячи этих классов Qt Π² Π½Π°Π±ΠΎΡ€Π΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Python, всС ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТатся Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ Python Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ PyQt5 .

PyQt5 совмСстим с Windows, Unix, Linux, macOS, iOS ΠΈ Android. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, Ссли Π²Ρ‹ ΠΈΡ‰Π΅Ρ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΈΠ»ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с СстСствСнным внСшним Π²ΠΈΠ΄ΠΎΠΌ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅.

PyQt5 доступСн ΠΏΠΎΠ΄ двумя лицСнзиями:

  1. ΠšΠΎΠΌΠΌΠ΅Ρ€Ρ‡Π΅ΡΠΊΠ°Ρ лицСнзия Π½Π° Π±Π΅Ρ€Π΅Π³Ρƒ Ρ€Π΅ΠΊΠΈ
  2. Бтандартная общСствСнная лицСнзия (GPL), вСрсия 3

Π’Π°ΡˆΠ° лицСнзия PyQt5 Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ совмСстима с вашСй Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ Qt.Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π²Π΅Ρ€ΡΠΈΡŽ GPL, ваш ΠΊΠΎΠ΄ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΡ†Π΅Π½Π·ΠΈΡŽ, ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΡƒΡŽ с GPL. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ PyQt5 для создания коммСрчСских ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π²Π°ΠΌ потрСбуСтся коммСрчСская лицСнзия для вашСй установки.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Компания Qt Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° ΠΈ Π² настоящСС врСмя ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ привязку Python для Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Qt. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Python называСтся Qt для Python ΠΈ считаСтся ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Qt для Python. Π’ этом случаС ΠΏΠ°ΠΊΠ΅Ρ‚ Python называСтся PySide2.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ PyQt5 ΠΈ PySide2 построСны ΠΏΠΎΠ²Π΅Ρ€Ρ… Qt, ΠΈΡ… API-интСрфСйсы ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹.Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ пСрСнос ΠΊΠΎΠ΄Π° PyQt5 Π½Π° PySide2 ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ простым, ΠΊΠ°ΠΊ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. Если Π²Ρ‹ Π²Ρ‹ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ…, Π²Ρ‹ смоТСтС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ усилиями. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π³Π»ΡƒΠ±ΠΆΠ΅ ΠΏΠΎΠ³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΡΡ Π² различия ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ рСсурсами:

Установка PyQt

Π£ вас Π΅ΡΡ‚ΡŒ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π½Π° Π²Ρ‹Π±ΠΎΡ€ ΠΏΡ€ΠΈ установкС PyQt Π² вашСй систСмС ΠΈΠ»ΠΈ срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ - сборка ΠΈΠ· исходников. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТно, поэтому, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ этого ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ.Если Π²Π°ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ исходный ΠΊΠΎΠ΄, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² Ρ‚Π°ΠΊΠΈΡ… случаях Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ докумСнтация Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ колСса. КолСса - ΠΎΡ‡Π΅Π½ΡŒ популярный способ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ установкой ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Python. Однако Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ колСса для PyQt5 доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Python 3.5 ΠΈ Π½ΠΎΠ²Π΅Π΅. Π•ΡΡ‚ΡŒ колСса Π½Π°:

  • Linux (64-разрядная)
  • macOS
  • Windows (32- ΠΈ 64-разрядная вСрсии)

ВсС эти колСса Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΊΠΎΠΏΠΈΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Qt, поэтому Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.

Π’Ρ€Π΅Ρ‚ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² дистрибутивах Linux ΠΈ macOS. Для Windows Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» .exe . Π§Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ ΠΈ послСдний Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ дистрибутив Anaconda для установки PyQt Π² вашСй систСмС. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… Π²Ρ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ΡΡŒ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ установки PyQt5 ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… источников ΠΈ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ….

ΠžΠ±Ρ‰Π΅ΡΠΈΡΡ‚Π΅ΠΌΠ½Π°Ρ установка с Ρ‚Ρ€ΡƒΠ±ΠΊΠΎΠΉ

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Python 3.5 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½Π΅ΠΉ вСрсии, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ PyQt5 ΠΈΠ· PyPI, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹ установитС PyQt5 Π² свою Π±Π°Π·ΠΎΠ²ΡƒΡŽ систСму. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ сразу послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ установки. Π’ зависимости ΠΎΡ‚ вашСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Π²Π°ΠΌ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€Π°Π²Π° root ΠΈΠ»ΠΈ администратора для Ρ€Π°Π±ΠΎΡ‚Ρ‹ этой установки.

Установка Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ срСды с

pip

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π½Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ PyQt нСпосрСдствСнно Π² вашСй Π±Π°Π·ΠΎΠ²ΠΎΠΉ систСмС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΡ€Ρ‚ΠΈΡ‚ΡŒ Π²Π°ΡˆΡƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ.Π’ этом случаС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ срСду Python. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ PyQt5:

  $ python3 -m venv pyqtvenv
$ source pyqtvenv / bin / Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ
(pyqtvenv) $ pip ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ pyqt5
Π‘Π±ΠΎΡ€ pyqt5
...
УспСшно установлСн PyQt5-sip-4.19.17 pyqt5-5.12.2
  

Π—Π΄Π΅ΡΡŒ Π²Ρ‹ создаСтС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ срСду с venv . ПослС Π΅Π³ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ Π²Ρ‹ устанавливаСтС pyqt5 Π² этой срСдС с pip install pyqt5 . Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ установки являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваша базовая систСма ΠΎΡΡ‚Π°Π²Π°Π»Π°ΡΡŒ чистой.

Установка для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹

Π’ экосистСмС Linux нСсколько дистрибутивов Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ для PyQt Π² свои Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Если это Π²Π΅Ρ€Π½ΠΎ для вашСго дистрибутива, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ диспСтчСра ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² дистрибутива. НапримСр, Π² Ubuntu 18.04 Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

  $ sudo apt install python3-pyqt5
  

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹ установитС PyQt5 ΠΈ всС Π΅Π³ΠΎ зависимости Π² свою Π±Π°Π·ΠΎΠ²ΡƒΡŽ систСму, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π² любом ΠΈΠ· Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² графичСского интСрфСйса.ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ root, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ здСсь с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ sudo .

Если Π²Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Mac, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ PyQt5 с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ диспСтчСра ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Homebrew. Для этого ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

Если всС ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π·Π½Π°Ρ‡ΠΈΡ‚, Π² вашСй Π±Π°Π·ΠΎΠ²ΠΎΠΉ систСмС Π±ΡƒΠ΄Π΅Ρ‚ установлСн PyQt5, Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊ использованию.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ диспСтчСр ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² Linux ΠΈΠ»ΠΈ macOS, Π΅ΡΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ вас Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ послСднСй вСрсии PyQt5.Установка pip Π±ΡƒΠ΄Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ вас Π±Ρ‹Π»Π° послСдняя вСрсия.

Если Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Windows, Π½ΠΎ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ колСса, Ρ‚ΠΎ ваш ΠΏΡƒΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· установку PyQt ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½Ρ‹ΠΌ. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ страница Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ PyQt5, ΠΏΠΎΡ…ΠΎΠΆΠ΅, большС Π½Π΅ прСдоставляСт Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Windows (Ρ„Π°ΠΉΠ»Ρ‹ .exe, ) для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ… вСрсий. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Windows для Π±ΠΎΠ»Π΅Π΅ старых вСрсий Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° страницС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ПослСдний Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π±Ρ‹Π» создан для PyQt v5.6.

Если Π²Π°ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ PyQt Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Π°ΠΌ потрСбуСтся:

  1. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅, ΠΊΠ°ΠΊΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Python Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅, ΠΈ ΠΊΠ°ΠΊΠΎΠΉ Ρƒ вас Python - 32-разрядный ΠΈΠ»ΠΈ 64-разрядный.
  2. Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ для вашСй установки Python
  3. УстановитС PyQt, запустив Ρ„Π°ΠΉΠ» .exe ΠΈ слСдуя инструкциям Π½Π° экранС

Установка Anaconda

Π”Ρ€ΡƒΠ³ΠΎΠΉ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для установки PyQt, являСтся Anaconda, дистрибутив Python для Π½Π°ΡƒΠΊΠΈ ΠΎ Π΄Π°Π½Π½Ρ‹Ρ….Anaconda - это бСсплатный ΠΌΠ½ΠΎΠ³ΠΎΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ срСды, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 1500 ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ.

Anaconda прСдоставляСт ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ мастСр установки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для установки PyQt Π² вашСй систСмС. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ, ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ для вашСй Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ инструкциям Π½Π° экранС. Если Π²Ρ‹ установитС послСднюю Π²Π΅Ρ€ΡΠΈΡŽ Anaconda, Ρƒ вас Π±ΡƒΠ΄ΡƒΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹:

  • pyqt : привязка Python для кроссплатформСнного инструмСнтария GUI Qt (коммСрчСская, GPL-2.0, Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ GPL-3.0)
  • anyqt : ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ совмСстимости для PyQt4 / PyQt5 (лицСнзия GPL-3.0)
  • qtpy : слой абстракции PyQt5 / PyQt4 / PySide (лицСнзия MIT)
  • pyqtgraph : Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Python для Π½Π°ΡƒΡ‡Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ (лицСнзия MIT)

Π‘ этим Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Ρƒ вас Π±ΡƒΠ΄Π΅Ρ‚ всС, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python ΠΈ PyQt.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ установка Anaconda Π·Π°ΠΉΠΌΠ΅Ρ‚ большой объСм дискового пространства.Если Π²Ρ‹ установитС Anaconda Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для использования ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² PyQt, Ρ‚ΠΎΠ³Π΄Π° Π² вашСй систСмС Π±ΡƒΠ΄Π΅Ρ‚ большоС количСство Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎΠ± этом, ΠΊΠΎΠ³Π΄Π° Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ ΠΎΠ± использовании дистрибутива Anaconda.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ вашСго ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ прилоТСния PyQt

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π°Ρ установка PyQt, Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ написанию ΠΊΠΎΠ΄Π°. Π’Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Β«Hello, World!Β» ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с Python ΠΈ PyQt. Π’ΠΎΡ‚ шаги, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ:

  1. Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ QApplication ΠΈ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ ΠΈΠ· PyQt5.QtWidgets .
  2. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ экзСмпляр QApplication .
  3. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ экзСмпляр графичСского интСрфСйса вашСго прилоТСния.
  4. ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ графичСский интСрфСйс вашСго прилоТСния.
  5. ЗапуститС Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий вашСго прилоТСния (ΠΈΠ»ΠΈ основной Ρ†ΠΈΠΊΠ»).

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ рассмотритС Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅, ΠΏΠΎ ссылкС Π½ΠΈΠΆΠ΅:

Π’Ρ‹ Π½Π°Ρ‡Π½Π΅Ρ‚Π΅ с Ρ„Π°ΠΉΠ»Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ hello.py Π² вашСм Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅:

  # Имя Ρ„Π°ΠΉΠ»Π°: hello.Ρ€Ρƒ

"" "ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Hello World с PyQt5." ""

import sys

# 1. Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ `QApplication` ΠΈ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹.
ΠΈΠ· PyQt5.QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QApplication
ΠΈΠ· PyQt5.QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QLabel
ΠΈΠ· PyQt5.QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QWidget
  

Π‘Π½Π°Ρ‡Π°Π»Π° Π²Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ sys , Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ статус Π²Ρ‹Ρ…ΠΎΠ΄Π° прилоТСния. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ QApplication , QWidget ΠΈ QLabel ΠΈΠ· QtWidgets , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ PyQt5 .Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΏΠΎΠ·ΠΆΠ΅, Π½ΠΎ ΠΏΠΎΠΊΠ° Π²Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ шагом.

Для Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ шага Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр QApplication ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  # 2. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ экзСмпляр QApplication
app = QApplication (sys.argv)
  

Π—Π΄Π΅ΡΡŒ Π²Ρ‹ создаСтС экзСмпляр QApplication . ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QApplication (ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ) выполняСт ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, связанный с графичСским интСрфСйсом.ΠžΠ±ΡŠΠ΅ΠΊΡ‚ QApplication Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π΅Π»ΠΎ с ΠΎΠ±Ρ‰ΠΈΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, поэтому Π²Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ sys.argv Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈ создании прилоТСния .

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: sys.argv содСрТит список Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… Π² сцСнарий Python. Если вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ пустой список вмСсто sys.argv . Π’ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ app = QApplication ([]) .

Π¨Π°Π³ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ - созданиС графичСского интСрфСйса прилоТСния. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ваш графичСский интСрфСйс Π±ΡƒΠ΄Π΅Ρ‚ основан Π½Π° QWidget , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса Π² PyQt. Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим графичСский интСрфСйс:

  # 3. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ экзСмпляр графичСского интСрфСйса вашСго прилоТСния.
ΠΎΠΊΠ½ΠΎ = QWidget ()
window.setWindowTitle ('ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ PyQt5')
window.setGeometry (100, 100, 280, 80)
window.move (60, 15)
helloMsg = QLabel (' 

Hello World!

', parent = window) helloMsg.move (60, 15)

Π’ этом ΠΊΠΎΠ΄Π΅ window являСтся экзСмпляром QWidget , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для создания ΠΎΠΊΠ½Π° (ΠΈΠ»ΠΈ Ρ„ΠΎΡ€ΠΌΡ‹) прилоТСния.Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ .setWindowTitle () Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π² ΠΎΠΊΠ½ΠΎ вашСго прилоТСния. Π’ этом случаС отобраТаСтся Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ PyQt5 App .

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ .setGeometry () , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠΊΠ½Π° ΠΈ мСсто Π΅Π³ΠΎ размСщСния Π½Π° экранС. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° - это ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ x ΠΈ y , Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΊΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΎ Π½Π° экранС. Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΈ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ - это ΡˆΠΈΡ€ΠΈΠ½Π° ΠΈ высота ΠΎΠΊΠ½Π°.

ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ с графичСским интСрфСйсом Π½ΡƒΠΆΠ½Ρ‹ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹! Π—Π΄Π΅ΡΡŒ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QLabel ( helloMsg ), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ сообщСниС Hello World! Π² ΠΎΠΊΠ½Π΅ вашСго прилоТСния. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ QLabel ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ тСкст HTML, поэтому Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ элСмСнт HTML '

Hello World!

' для форматирования тСкста ΠΊΠ°ΠΊ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° h2 . НаконСц, Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ .move () , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ helloMsg с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (60, 15) Π² ΠΎΠΊΠ½Π΅ вашСго прилоТСния.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π’ PyQt5 Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ (подкласс QWidget ) ΠΊΠ°ΠΊ ΠΎΠΊΠ½ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΊΡƒ. ЕдинствСнноС условиС - Π²Ρ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΡ‚Π΅ Π΅ΠΌΡƒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ . Когда Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΎΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚, PyQt5 автоматичСски выдСляСт Π΅ΠΌΡƒ строку Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ.

ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Π΄Π²ΡƒΡ… Π²Π·Π°ΠΈΠΌΠΎΠ΄ΠΎΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ:

  1. Π’ΠΈΠ΄ΠΆΠ΅Ρ‚, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅Ρ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ элСмСнта , - это Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΈΠ»ΠΈ ΠΎΠΊΠ½ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня .
  2. Π’ΠΈΠ΄ΠΆΠ΅Ρ‚, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ элСмСнт (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ всСгда являСтся Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠΌ), содСрТится (ΠΈΠ»ΠΈ отобраТаСтся) Π² своСм Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ элСмСнтС .

Π­Ρ‚Π° взаимосвязь Ρ‚Π°ΠΊΠΆΠ΅ опрСдСляСт ΠΏΡ€Π°Π²Π° собствСнности , ΠΊΠΎΠ³Π΄Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ Π²Π»Π°Π΄Π΅ΡŽΡ‚ своими Π΄Π΅Ρ‚ΡŒΠΌΠΈ. МодСль владСния PyQt5 Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ элСмСнта (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠΊΠ½ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня), Ρ‚ΠΎ всС Π΅Π³ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ элСмСнты (Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹) Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ автоматичСски ΡƒΠ΄Π°Π»Π΅Π½Ρ‹.

Π’ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти всСгда слСдуСт ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QWidget ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ , Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΊΠΎΠ½ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня.

Π’Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ шаг, поэтому Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌ послСдниС Π΄Π²Π° шага ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΌ вашС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ PyQt ΠΊ запуску:

  # 4. ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ графичСский интСрфСйс вашСго прилоТСния
window.show ()

# 5. ЗапуститС Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий вашСго прилоТСния (ΠΈΠ»ΠΈ основной Ρ†ΠΈΠΊΠ»).
sys.exit (app.exec_ ())
  

Π—Π΄Π΅ΡΡŒ Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ .show () Π² ΠΎΠΊΠ½Π΅ . Π’Ρ‹Π·ΠΎΠ² .show () ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚ событиС рисования. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΎΠ½ добавляСт Π½ΠΎΠ²ΠΎΠ΅ событиС Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ событий прилоТСния. Π’Ρ‹ рассмотритС Ρ†ΠΈΠΊΠ» событий Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ рисования - это запрос Π½Π° рисованиС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… графичСский интСрфСйс.

НаконСц, Π²Ρ‹ запускаСтС Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий прилоТСния, вызывая app.exec_ () . Π’Ρ‹Π·ΠΎΠ² .exec_ () Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² Π²Ρ‹Π·ΠΎΠ² sys.exit () , Ρ‡Ρ‚ΠΎ позволяСт Π²Π°ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· Python ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ рСсурсы памяти ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ hello.py с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

Когда Π²Ρ‹ запуститС этот скрипт, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ:

Π—Π΄Π΅ΡΡŒ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠΊΠ½ΠΎ (Π½Π° основС QWidget ) с сообщСниСм Hello World! Π½Π° Π½Π΅ΠΌ.Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ сообщСниС, Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ QLabel , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит сообщСниС Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ HTML.

ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΡŽ! Π’Ρ‹ создали своС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ PyQt!

Π‘ ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ стилСй ΠΊΠΎΠ΄Π°

Если Π²Ρ‹ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ посмотритС Π½Π° ΠΊΠΎΠ΄ своСго ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ прилоТСния, Ρ‚ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ PyQt Π½Π΅ слСдуСт ΡΡ‚ΠΈΠ»ΡŽ кодирования PEP 8 ΠΈ соглашСниям ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ…. PyQt построСн Π½Π° основС Qt, написанного Π½Π° C ++ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ ΡΡ‚ΠΈΠ»ΡŒ имСнования camelCase для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΡΡ‚ΠΈΠ»ΡŒ имСнования Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для своих собствСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с графичСским интСрфСйсом PyQt.

Π’ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² PEP 8 говорится, Ρ‡Ρ‚ΠΎ:

НовыС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ (Π² Ρ‚ΠΎΠΌ числС сторонниС Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ) Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ написаны Π² соотвСтствии с этими стандартами, Π½ΠΎ Ссли ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡΡ‚ΠΈΠ»ΡŒ, ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π° внутрСнняя ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ. (Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ)

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π”Π·Π΅Π½ ΠŸΠΈΡ‚ΠΎΠ½Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚:

… ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ Π²Π°ΠΆΠ½Π΅Π΅ чистоты. (Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ)

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ согласованный ΠΊΠΎΠ΄, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚ΠΈΠ»ΡŒ имСнования PEP 8 ΠΈ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ стиля имСнования PyQt.Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ. Π’ этом руководствС Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚ΠΈΠ»ΡŽ имСнования PyQt для Сдинообразия.

Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ основ PyQt

Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ²Π»Π°Π΄Π΅Ρ‚ΡŒ основными концСпциями Π»ΠΎΠ³ΠΈΠΊΠΈ PyQt, Ρ‡Ρ‚ΠΎΠ±Ρ‹ эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. НСкоторыС ΠΈΠ· этих ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚:

  • Π’ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹
  • ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΏΠΎ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ
  • Π”ΠΈΠ°Π»ΠΎΠ³ΠΈ
  • ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΎΠΊΠ½Π°
  • ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
  • Π¦ΠΈΠΊΠ»Ρ‹ событий
  • Π‘ΠΈΠ³Π½Π°Π»Ρ‹ ΠΈ слоты

Π­Ρ‚ΠΈ элСмСнты Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ PyQt GUI.Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· Π½ΠΈΡ… прСдставлСны Π² Π²ΠΈΠ΄Π΅ классов Python. PyQt5.QtWidgets - это ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт всС эти классы. Π­Ρ‚ΠΈ элСмСнты Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ Π²Π°ΠΆΠ½Ρ‹, поэтому Π²Ρ‹ рассмотрим ΠΈΡ… Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ….

Π’ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹

QWidget - это Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс для всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса ΠΈΠ»ΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² . Π­Ρ‚ΠΎ графичСскиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΎΠΊΠ½Π°Ρ… своСго прилоТСния для создания графичСского интСрфСйса. Π’ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ содСрТат ряд Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… внСшний Π²ΠΈΠ΄ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.Они Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ своС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° экранС.

Π’ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Ρ‰Π΅Π»Ρ‡ΠΊΠΈ ΠΌΡ‹ΡˆΠΈ, наТатия клавиш ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ события ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ систСмы ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… источников. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ΡƒΠ»Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ событиС, ΠΎΠ½ ΠΈΠ·Π΄Π°Π΅Ρ‚ сигнал, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ своСго состояния. PyQt5 ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ³Π°Ρ‚ΡƒΡŽ ΠΈ ΡΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слуТат нСскольким цСлям. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ²:

  • Кнопки
  • Π­Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΊΠΈ
  • Линия ΠΏΡ€Π°Π²ΠΎΠΊ
  • ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ
  • Π Π°Π΄ΠΈΠΎΠΊΠ½ΠΎΠΏΠΊΠΈ

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ рассмотрим ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ².ΠŸΠ΅Ρ€Π²ΠΎΠΉ ΠΈΠ΄Π΅Ρ‚ ΠΊΠ½ΠΎΠΏΠΊΠ° . Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ, создав экзСмпляр QPushButton , класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт ΠΊΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ: ОК , ΠžΡ‚ΠΌΠ΅Π½Π° , ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ , Π”Π° , НСт ΠΈ Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ . Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ выглядят Π² систСмС Linux:

Π’Π°ΠΊΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ Π² любом графичСском интСрфСйсС. Π©Π΅Π»ΠΊΠ½ΡƒΠ² ΠΏΠΎ Π½ΠΈΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ дСйствия. Π’Ρ‹ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ дСйствия Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

Π”Π°Π»Π΅Π΅ ΠΈΠ΄ΡƒΡ‚ ярлыков , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ QLabel . Π―Ρ€Π»Ρ‹ΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² Π²ΠΈΠ΄Π΅ тСкста ΠΈΠ»ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ:

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ярлыки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ использованиС вашСго графичСского интСрфСйса. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΈΡ… внСшний Π²ΠΈΠ΄ нСсколькими способами, ΠΈ ΠΎΠ½ΠΈ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ тСкст HTML, ΠΊΠ°ΠΊ Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Ρ€Π°Π½Π΅Π΅. Π―Ρ€Π»Ρ‹ΠΊΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для указания мнСмоничСской клавиши фокуса для Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°.

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ распространСнным Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠΌ являСтся строка рСдактирования , однострочноС тСкстовоС ΠΏΠΎΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ QLineEdit .Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ строк ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΠ» ΠΈΠ»ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π» Π΄Π°Π½Π½Ρ‹Π΅ Π² тСкстовом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ выглядят Π² систСмС Linux:

ПодобноС Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ обСспСчиваСт Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ рСдактирования, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ , Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ , ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ , ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ , ΠΏΠ΅Ρ€Π΅Ρ‚Π°Ρ‰ΠΈΡ‚ΡŒ, ΠΎΡ‚ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈ Ρ‚. Π”. На ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ рисункС Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ тСкст-Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ Π²Π²ΠΎΠ΄Π° трСбуСтся.

Поля со списком - Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ QComboBox .ПолС со списком прСдставит Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π·Π°Π½ΠΈΠΌΠ°Π» минимальноС пространство Π½Π° экранС. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ списка Π² систСмС Linux:

Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅ со списком Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния , Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ свои собствСнныС. Поля со списком Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ , Ρ‡Ρ‚ΠΎ позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Они ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ изобраТСния, строки ΠΈΠ»ΠΈ ΠΈ Ρ‚ΠΎ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅.

ПослСдний Π²ΠΈΠ΄ΠΆΠ΅Ρ‚, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ здСсь расскаТСтС, - это Ρ€Π°Π΄ΠΈΠΎΠΊΠ½ΠΎΠΏΠΊΠ° , ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ QRadioButton .ΠžΠ±ΡŠΠ΅ΠΊΡ‚ QRadioButton - это ΠΊΠ½ΠΎΠΏΠΊΠ° Π²Ρ‹Π±ΠΎΡ€Π°, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° (ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π°) ΠΈΠ»ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π° (Π½Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π°). Π Π°Π΄ΠΈΠΎΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±Ρ€Π°Π» ΠΎΠ΄ΠΈΠ½ ΠΈΠ· мноТСства Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ². Π’ этом случаС всС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π½Π° экранС ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ:

Π’ этой Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ ΠΊΠ½ΠΎΠΏΠΊΡƒ. Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ, Ρ‚ΠΎ Ρ€Π°Π½Π΅Π΅ выбранная ΠΊΠ½ΠΎΠΏΠΊΠ° автоматичСски ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ.

PyQt5 ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ².На ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Ρƒ вас Π±Ρ‹Π»ΠΎ Π±ΠΎΠ»Π΅Π΅ сорока доступных для создания графичСского интСрфСйса вашСго прилоТСния. Π’Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ рассмотрСли, - это лишь нСбольшой ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎ ΠΎΠ½ΠΈ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ Π²Π°ΠΌ ΠΌΠΎΡ‰ΡŒ ΠΈ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ PyQt5. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ для создания соврСмСнных ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… графичСских интСрфСйсов ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ для Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΏΠΎ ΠΌΠ°ΠΊΠ΅Ρ‚Ρƒ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для создания графичСских интСрфСйсов. Но ΠΊΠ°ΠΊ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² для создания ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ графичСского интСрфСйса? БущСствуСт мноТСство ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для размСщСния Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈΠ»ΠΈ ΠΎΠΊΠ½Π΅.НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ .resize () ΠΈ .move () , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΈ полоТСния Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ². Однако Ρƒ этого ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСдостатки:

  • Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° Π² Π²Π°ΡˆΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ…, Π²Π°ΠΌ придСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ мноТСство вычислСний Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.
  • Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„ΠΎΡ€ΠΌΡ‹, Π²Π°ΠΌ потрСбуСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ вычислСния (событиС измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° , ).
  • Π’Π°ΠΌ придСтся ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ всС вычислСния всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ мСняСтС ΠΌΠ°ΠΊΠ΅Ρ‚ Ρ„ΠΎΡ€ΠΌ, добавляСтС ΠΈΠ»ΠΈ удаляСтС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹.

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ являСтся использованиС .resizeEvent () для динамичСского расчСта Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ полоТСния Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°. Однако Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ эффСктивной Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использованиС ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ°ΡŽΡ‚ Ρ€Π΅ΠΌΠΎΠ½Ρ‚ΠΎΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎΡΡ‚ΡŒ вашСго ΠΊΠΎΠ΄Π°.

ДиспСтчСры ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ - это классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Π°ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ваши Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Π² Ρ‚Π΅Ρ… мСстах, Π³Π΄Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π² Ρ„ΠΎΡ€ΠΌΠ΅ прилоТСния. ДиспСтчСры ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ автоматичСски Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊ измСнСнию Ρ€Π°Π·ΠΌΠ΅Ρ€Π° событий ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ содСрТимого.Они Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½ΠΈΡ…. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² Π² ΠΌΠ°ΠΊΠ΅Ρ‚Π΅ автоматичСски измСняСтся ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„ΠΎΡ€ΠΌΡ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½Ρ‹Π΅ прилоТСния, Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ этикСток. Π­Ρ‚ΠΎ особСнно вСроятно, ΠΊΠΎΠ³Π΄Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ язык Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ, Ρ‡Π΅ΠΌ исходный. ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этой распространСнной ошибки. Однако эта функция ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТной ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с особСнно многословными языками.

PyQt прСдоставляСт Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ основных класса ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ:

  1. QHBoxLayout
  2. QVBoxLayout
  3. QGridLayout
  4. QFormLayout

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ класс ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ - это QHBoxLayout , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ упорядочиваСт Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ:

Π’ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ появятся ΠΎΠ΄ΠΈΠ½ рядом с Π΄Ρ€ΡƒΠ³ΠΈΠΌ, начиная слСва.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠ΄Π° ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ QHBoxLayout для размСщСния ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ:

  1 # Имя Ρ„Π°ΠΉΠ»Π°: h_layout.Ρ€Ρƒ
 2
 3 "" "ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ." ""
 4
 5import sys
 6
 7ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QApplication
 8ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ QHBoxLayout
 9ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QPushButton
10 ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QWidget
11
12app = QApplication (sys.argv)
13window = QWidget ()
14window.setWindowTitle ('QHBoxLayout')
15layout = QHBoxLayout ()
16layout.addWidget (QPushButton ('Π’Π»Π΅Π²ΠΎ'))
17layout.addWidget (QPushButton ('Π¦Π΅Π½Ρ‚Ρ€'))
18layout.addWidget (QPushButton ('Π’ΠΏΡ€Π°Π²ΠΎ'))
19window.setLayout (ΠΌΠ°ΠΊΠ΅Ρ‚)
20ΠΎΠΊΠ½ΠΎ.ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ()
21sys.exit (app.exec_ ())
  

Π’Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ строки здСсь Ρ‚Π²ΠΎΡ€ΠΈΡ‚ чудСса:

  • Π‘Ρ‚Ρ€ΠΎΠΊΠ° 15 создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QHBoxLayout с ΠΈΠΌΠ΅Π½Π΅ΠΌ layout .
  • Π‘Ρ‚Ρ€ΠΎΠΊΠΈ с 16 ΠΏΠΎ 18 Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Ρ‚Ρ€ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² ΠΌΠ°ΠΊΠ΅Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ .addWidget ()
  • Π‘Ρ‚Ρ€ΠΎΠΊΠ° 19 устанавливаСт ΠΌΠ°ΠΊΠ΅Ρ‚ Π² качСствС ΠΌΠ°ΠΊΠ΅Ρ‚Π° вашСго ΠΎΠΊΠ½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ .setLayout () .

ΠŸΡ€ΠΈ запускС python3 h_layout.py ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

На рисункС Π²Ρ‹ΡˆΠ΅ Π²Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Ρ‚Ρ€ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ, располоТСнныС Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ порядкС, Π² ΠΊΠ°ΠΊΠΎΠΌ Π²Ρ‹ добавляли ΠΈΡ… Π² свой ΠΊΠΎΠ΄.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ класс ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ - QVBoxLayout , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ упорядочиваСт Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ, свСрху Π²Π½ΠΈΠ·:

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ ΠΏΠΎΠ΄ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ. Π­Ρ‚ΠΎΡ‚ класс ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠ°ΠΊΠ΅Ρ‚Π° Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° свСрху Π²Π½ΠΈΠ·.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QVBoxLayout :

  1 # Имя Ρ„Π°ΠΉΠ»Π°: v_layout.py
 2
 3 "" "ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ." ""
 4
 5import sys
 6
 7ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QApplication
 8ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QPushButton
 9ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ QVBoxLayout
10 ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QWidget
11
12app = QApplication (sys.argv)
13window = QWidget ()
14window.setWindowTitle ('QVBoxLayout')
15layout = QVBoxLayout ()
16layout.addWidget (QPushButton ('Π’Π²Π΅Ρ€Ρ…Ρƒ'))
17layout.addWidget (QPushButton ('Π¦Π΅Π½Ρ‚Ρ€'))
18layout.addWidget (QPushButton ('Π‘Π½ΠΈΠ·Ρƒ'))
19window.setLayout (ΠΌΠ°ΠΊΠ΅Ρ‚)
20window.show ()
21sys.exit (app.exec_ ())
  

Π’ строкС 15 Π²Ρ‹ создаСтС экзСмпляр QVBoxLayout . Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ‚Ρ€Π΅Ρ… строках Π²Ρ‹ добавляСтС Ρ‚Ρ€ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² ΠΌΠ°ΠΊΠ΅Ρ‚ . НаконСц, Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΌΠ°ΠΊΠ΅Ρ‚ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ.

Когда Π²Ρ‹ запуститС это ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Π’ этом ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Ρ‚Ρ€ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ располоТСны Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ, ΠΎΠ΄Π½Π° ΠΏΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΎΠΉ.Кнопки ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ порядкС, Π² ΠΊΠ°ΠΊΠΎΠΌ Π²Ρ‹ добавляли ΠΈΡ… Π² свой ΠΊΠΎΠ΄, свСрху Π²Π½ΠΈΠ·.

Π’Ρ€Π΅Ρ‚ΠΈΠΉ класс ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ - QGridLayout , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ упорядочиваСт Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Π² сСтку ΠΈΠ· строк ΠΈ столбцов. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² сСткС. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π΅ΠΌΡƒ ΠΏΠ°Ρ€Ρƒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π² Π²ΠΈΠ΄Π΅ (строка, столбСц) . Π­Ρ‚ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ int числа. Они ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, Π² ΠΊΠ°ΠΊΡƒΡŽ ячСйку сСтки Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚.Π‘Ρ…Π΅ΠΌΠ° сСтки Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

QGridLayout Π±Π΅Ρ€Π΅Ρ‚ пространство, доступноС Π΅ΠΌΡƒ Π΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ , Π΄Π΅Π»ΠΈΡ‚ Π΅Π³ΠΎ Π½Π° строк ΠΈ столбцов ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ Π² свою ячСйку.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ QGridLayout Π² вашСм графичСском интСрфСйсС:

  1 # Имя Ρ„Π°ΠΉΠ»Π°: g_layout.py
 2
 3 "" "ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ сСтки." ""
 4
 5import sys
 6
 7ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QApplication
 8ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ QGridLayout
 9 ΠΈΠ· PyQt5.QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QPushButton
10 ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QWidget
11
12app = QApplication (sys.argv)
13window = QWidget ()
14window.setWindowTitle ('QGridLayout')
15layout = QGridLayout ()
16layout.addWidget (QPushButton ('Кнопка (0, 0)'), 0, 0)
17layout.addWidget (QPushButton ('Кнопка (0, 1)'), 0, 1)
18layout.addWidget (QPushButton ('Кнопка (0, 2)'), 0, 2)
19layout.addWidget (QPushButton ('Кнопка (1, 0)'), 1, 0)
20layout.addWidget (QPushButton ('Кнопка (1, 1)'), 1, 1)
21layout.addWidget (QPushButton ('Кнопка (1, 2)'), 1, 2)
22layout.addWidget (QPushButton ('Кнопка (2, 0)'), 2, 0)
23layout.addWidget (QPushButton ('Button (2, 1) + 2 Columns Span'), 2, 1, 1, 2)
24window.setLayout (ΠΌΠ°ΠΊΠ΅Ρ‚)
25window.show ()
26sys.exit (app.exec_ ())
  

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ создаСтС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QGridLayout для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ своих Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ². ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² этом случаС Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ Π² .addWidget () , ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ int , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°.

Π’ строкС 23 Π²Ρ‹ добавляСтС Π΅Ρ‰Π΅ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΊ .addWidget () . Π­Ρ‚ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ rowSpan ΠΈ columnSpan , ΠΈ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΌ ΠΈ пятым Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Π» Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ строки ΠΈΠ»ΠΈ столбца, ΠΊΠ°ΠΊ Π² случаС с QPushButton ('Button (2, 1) + 2 Columns Span') здСсь.

Если Π²Ρ‹ запуститС этот ΠΊΠΎΠ΄ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ:

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ свои Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Π² Π²ΠΈΠ΄Π΅ сСтки ΠΈΠ· строк ΠΈ столбцов. ПослСдний Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ ячСйки, ΠΊΠ°ΠΊ Π²Ρ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π² строкС 23.

ПослСдний класс ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ - QFormLayout , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ упорядочиваСт Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Π² Π²ΠΈΠ΄Π΅ Π΄Π²ΡƒΡ… столбцов. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ столбцС сообщСния ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ ярлыков. Π’Ρ‚ΠΎΡ€ΠΎΠΉ столбСц ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ содСрТит Ρ‚Π°ΠΊΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹, ΠΊΠ°ΠΊ QLineEdit , QComboBox , QSpinBox ΠΈ Ρ‚. Π”. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, относящиСся ΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ столбцС. На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΌΠ°ΠΊΠ΅Ρ‚Ρ‹ Ρ„ΠΎΡ€ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅:

Π›Π΅Π²Ρ‹ΠΉ столбСц состоит ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠΊ, Π° ΠΏΡ€Π°Π²Ρ‹ΠΉ столбСц состоит ΠΈΠ· Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² ΠΏΠΎΠ»Π΅ΠΉ.Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΎΠΉ Π²ΠΈΠ΄ ΠΌΠ°ΠΊΠ΅Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ создании Ρ„ΠΎΡ€ΠΌ.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QFormLayout для упорядочивания своих Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ²:

  1 # Имя Ρ„Π°ΠΉΠ»Π°: f_layout.py
 2
 3 "" "ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠ°ΠΊΠ΅Ρ‚Π° Ρ„ΠΎΡ€ΠΌΡ‹." ""
 4
 5import sys
 6
 7ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QApplication
 8ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ QFormLayout
 9 ΠΈΠ· PyQt5.QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QLineEdit
10 ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QWidget
11
12app = QApplication (sys.argv)
13window = QWidget ()
14window.setWindowTitle ('QFormLayout')
15layout = QFormLayout ()
16layout.addRow ('Имя:', QLineEdit ())
17layout.addRow ('Возраст:', QLineEdit ())
18layout.addRow ('Π—Π°Π΄Π°Π½ΠΈΠ΅:', QLineEdit ())
19layout.addRow ('Π₯ΠΎΠ±Π±ΠΈ:', QLineEdit ())
20window.setLayout (ΠΌΠ°ΠΊΠ΅Ρ‚)
21window.show ()
22sys.exit (ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.exec_ ())
  

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ с 15 ΠΏΠΎ 20 Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Ρ‚ΡΠΆΠ΅Π»ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ QFormLayout ΠΈΠΌΠ΅Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ .addRow () . Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΌΠ°ΠΊΠ΅Ρ‚ строку с двумя Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ .addRow () Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅.

Если Π²Ρ‹ запуститС этот ΠΊΠΎΠ΄, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

На рисункС Π²Ρ‹ΡˆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ графичСский интСрфСйс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ°ΠΊΠ΅Ρ‚ Ρ„ΠΎΡ€ΠΌΡ‹. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ столбСц содСрТит ΠΌΠ΅Ρ‚ΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ столбцС ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΡƒΡŽ Ρƒ Π½ΠΈΡ… ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

Π”ΠΈΠ°Π»ΠΎΠ³ΠΈ

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PyQt Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’ зависимости ΠΎΡ‚ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ для создания Π³Π»Π°Π²Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈΠ»ΠΈ ΠΎΠΊΠ½Π°, Ρƒ вас Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:

  1. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² стилС Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°: Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ прилоТСния являСтся наслСдником QMainWindow .
  2. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² стилС Π΄ΠΈΠ°Π»ΠΎΠ³Π°: Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ прилоТСния являСтся наслСдником QDialog .

Π‘Π½Π°Ρ‡Π°Π»Π° Π²Ρ‹ Π½Π°Ρ‡Π½Π΅Ρ‚Π΅ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² стилС Π΄ΠΈΠ°Π»ΠΎΠ³Π°.Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ рассмотрим прилоТСния Π² стилС Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°.

Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ прилоТСния Π² стилС Π΄ΠΈΠ°Π»ΠΎΠ³Π° Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс графичСского интСрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСтся ΠΎΡ‚ QDialog , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом всСх Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΎΠΊΠΎΠ½. Π”ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ всСгда являСтся ΠΎΠΊΠ½ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° для своСго прилоТСния Π² стилС Π΄ΠΈΠ°Π»ΠΎΠ³Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π”ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² прилоТСниях Π² стилС Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° для ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ³ΠΎ общСния ΠΈ взаимодСйствия с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

Когда Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для связи с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ:

  • ΠœΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π°: Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π²ΠΎΠ΄ Π² Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²ΠΈΠ΄ΠΈΠΌΡ‹Π΅ ΠΎΠΊΠ½Π° Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ модальноС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, Π²Ρ‹Π·Π²Π°Π² .exec_ () .
  • ΠΠ΅ΠΌΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΈ: Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ нСзависимо ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΊΠΎΠ½ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ нСмодальноС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ .show () .

Π”ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, OK ΠΈ ΠžΡ‚ΠΌΠ΅Π½Π° ).

Π”ΠΈΠ°Π»ΠΎΠ³ всСгда являСтся Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня. Если Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ элСмСнт , Ρ‚ΠΎ Π΅Π³ΠΎ мСстополоТСниС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ цСнтрируСтся Π½Π°Π΄ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня. Π’ этом Π΄ΠΈΠ°Π»ΠΎΠ³Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ запись Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ Π·Π°Π΄Π°Ρ‡ родитСля. Если Π²Ρ‹ Π½Π΅ установитС Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, Ρ‚ΠΎ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ запись Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ Π·Π°Π΄Π°Ρ‡ систСмы.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ использовали Π±Ρ‹ QDialog для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ прилоТСния Π² стилС Π΄ΠΈΠ°Π»ΠΎΠ³Π°:

  1 # Имя Ρ„Π°ΠΉΠ»Π°: Π΄ΠΈΠ°Π»ΠΎΠ³.Ρ€Ρƒ
 2
 3 "" "ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² стилС Π΄ΠΈΠ°Π»ΠΎΠ³Π°." ""
 4
 5import sys
 6
 7ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QApplication
 8ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QDialog
 9ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QDialogButtonBox
10 ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ QFormLayout
11 ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QLineEdit
12 ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ QVBoxLayout
13
Π”ΠΈΠ°Π»ΠΎΠ³ 14 классов (QDialog):
15 "" "Π”ΠΈΠ°Π»ΠΎΠ³." ""
16 def __init __ (self, parent = None):
17 "" "Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€." ""
18 super () .__ init __ (Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ)
19 self.setWindowTitle ('QDialog')
20 dlgLayout = QVBoxLayout ()
21 formLayout = QFormLayout ()
22 formLayout.addRow ('Имя:', QLineEdit ())
23 formLayout.addRow ('Возраст:', QLineEdit ())
24 formLayout.addRow ('Π—Π°Π΄Π°Π½ΠΈΠ΅:', QLineEdit ())
25 formLayout.addRow ('Π₯ΠΎΠ±Π±ΠΈ:', QLineEdit ())
26 dlgLayout.addLayout (formLayout)
27 btns = QDialogButtonBox ()
28 btns.setStandardButtons (
29 QDialogButtonBox.Cancel | QDialogButtonBox.Ok)
30 dlgLayout.addWidget (btns)
31 self.setLayout (dlgLayout)
32
33 Ссли __name__ == '__main__':
34 ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ = QApplication (sys.argv)
35 dlg = Π”ΠΈΠ°Π»ΠΎΠ³ ()
36 Π΄Π».ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ()
37 систСмный Π²Ρ‹Ρ…ΠΎΠ΄ (app.exec_ ())
  

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС. Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ происходит:

  • Π‘Ρ‚Ρ€ΠΎΠΊΠ° 14 создаСт ΠΏΠΎΠ»Π½Ρ‹ΠΉ класс Dialog для графичСского интСрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСтся ΠΎΡ‚ QDialog .
  • Π‘Ρ‚Ρ€ΠΎΠΊΠ° 20 Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QVBoxLayout dlgLaout .
  • Π‘Ρ‚Ρ€ΠΎΠΊΠ° 21 Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QVFormLayout для formLayout .
  • Π‘Ρ‚Ρ€ΠΎΠΊΠΈ с 22 ΠΏΠΎ 25 Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Π² Ρ„ΠΎΡ€ΠΌΡƒ formLayout .
  • Π‘Ρ‚Ρ€ΠΎΠΊΠ° 26 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ dlgLayout для размСщСния всСх Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ΅.
  • Π‘Ρ‚Ρ€ΠΎΠΊΠ° 27 прСдоставляСт ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ для размСщСния Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΊΠ½ΠΎΠΏΠΎΠΊ.
  • Π‘Ρ‚Ρ€ΠΎΠΊΠΈ 28 ΠΈ 29 Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Π΄Π²Π΅ стандартныС ΠΊΠ½ΠΎΠΏΠΊΠΈ: Ok ΠΈ Cancel .
  • Π‘Ρ‚Ρ€ΠΎΠΊΠΈ с 33 ΠΏΠΎ 37 Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² if __name__ == '__main__': ΠΈΠ΄ΠΈΠΎΠΌΠ°. Π­Ρ‚ΠΎ считаСтся Π»ΡƒΡ‡ΡˆΠ΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ для питонистов.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если Π²Ρ‹ посмотритС Π½Π° строку 26 Π² Π±Π»ΠΎΠΊΠ΅ ΠΊΠΎΠ΄Π° Π²Ρ‹ΡˆΠ΅, Ρ‚ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ Π² Π΄Ρ€ΡƒΠ³Π°.Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΠ΅Ρ‚Ρ‹, Π²Ρ‹Π·Π²Π°Π² .addLayout () Π² ΠΌΠ°ΠΊΠ΅Ρ‚Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΌΠ°ΠΊΠ΅Ρ‚ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° этому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ:

Π­Ρ‚ΠΎ графичСский интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ создали с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ QFormLayout для Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² ΠΈ QVBoxLayout для ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΌΠ°ΠΊΠ΅Ρ‚Π° прилоТСния ( dlgLayout Π² строкС 20).

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΎΠΊΠ½Π°

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ваши прилоТСния с графичСским интСрфСйсом Π±ΡƒΠ΄ΡƒΡ‚ Π² стилС Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° .Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρƒ Π½ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ строка мСню, нСсколько ΠΏΠ°Π½Π΅Π»Π΅ΠΉ инструмСнтов, строка состояния ΠΈ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ основным элСмСнтом графичСского интСрфСйса. Π’Π°ΠΊΠΆΠ΅ часто Π² Π²Π°ΡˆΠΈΡ… прилоТСниях Π΅ΡΡ‚ΡŒ нСсколько Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΎΠΊΠΎΠ½ для выполнСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… дСйствий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ зависят ΠΎΡ‚ Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс QMainWindow для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² стилС Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ QMainWindow , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой основной класс графичСского интСрфСйса. ЭкзСмпляр класса, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΡ‚ QMainWindow , считаСтся Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠΊΠ½ΠΎΠΌ . QMainWindow прСдоставляСт основу для построСния графичСского интСрфСйса вашСго прилоТСния. Π£ класса Π΅ΡΡ‚ΡŒ собствСнный встроСнный ΠΌΠ°ΠΊΠ΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для размСщСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ:

  • Одна строка мСню находится Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части ΠΎΠΊΠ½Π°. Π‘Ρ‚Ρ€ΠΎΠΊΠ° мСню содСрТит Π³Π»Π°Π²Π½ΠΎΠ΅ мСню прилоТСния.

  • НСсколько ΠΏΠ°Π½Π΅Π»Π΅ΠΉ инструмСнтов находятся ΠΏΠΎ Π±ΠΎΠΊΠ°ΠΌ ΠΎΠΊΠ½Π°. ПанСли инструмСнтов подходят для размСщСния ΠΊΠ½ΠΎΠΏΠΎΠΊ инструмСнтов ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²ΠΈΠ΄ΠΎΠ² Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ QComboBox , QSpinBox ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ….

  • Один Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ находится Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ ΠΎΠΊΠ½Π°. Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любого Ρ‚ΠΈΠΏΠ° ΠΈΠ»ΠΈ составным.

  • НСсколько Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² Π΄ΠΎΠΊ-станции находятся Π²ΠΎΠΊΡ€ΡƒΠ³ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°. Π’ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Π΄ΠΎΠΊ-станции - это малСнькиС ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Ρ‹Π΅ ΠΎΠΊΠ½Π°.

  • Одна строка состояния находится Π²Π½ΠΈΠ·Ρƒ ΠΎΠΊΠ½Π°. Π’ строкС состояния отобраТаСтся информация ΠΎΠ± ΠΎΠ±Ρ‰Π΅ΠΌ состоянии прилоТСния.

НСвозмоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π±Π΅Π· ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ настройки Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°.Π£ вас Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚, Π΄Π°ΠΆΠ΅ Ссли это просто Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ. Π’ этом случаС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QWidget Π² качСствС Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ .setCentralWidget () . Компоновка Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚, Π½ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ составной Π²ΠΈΠ΄ΠΆΠ΅Ρ‚.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠ΄Π° ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ QMainWindow для создания прилоТСния Π² стилС Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°:

  1 # Имя Ρ„Π°ΠΉΠ»Π°: main_window.Ρ€Ρƒ
 2
 3 "" "ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² стилС Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°." ""
 4
 5import sys
 6
 7ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QApplication
 8ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QLabel
 9ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QMainWindow
10 ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QStatusBar
11 ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QToolBar
12
Окно класса 13 (QMainWindow):
14 "" "Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ." ""
15 def __init __ (self, parent = None):
16 "" "Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€." ""
17 super () .__ init __ (Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ)
18 self.setWindowTitle ('QMainWindow')
19 self.setCentralWidget (QLabel (Β«Π― Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Β»))
20 сам._createMenu ()
21 self._createToolBar ()
22 self._createStatusBar ()
23
24 def _createMenu (сам):
25 self.menu = self.menuBar (). AddMenu ("& МСню")
26 self.menu.addAction ('& Exit', self.close)
27
28 def _createToolBar (сам):
29 инструмСнтов = QToolBar ()
30 self.addToolBar (инструмСнты)
31 tools.addAction ('Π’Ρ‹Ρ…ΠΎΠ΄', self.close)
32
33 def _createStatusBar (сам):
34 статус = QStatusBar ()
35 status.showMessage (Β«Π― - строка состояния»)
36 сам.setStatusBar (статус)
37
38 Ссли __name__ == '__main__':
39 ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ = QApplication (sys.argv)
40 побСд = Окно ()
41 win.show ()
42 sys.exit (app.exec_ ())
  

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ этот ΠΊΠΎΠ΄:

  • Π‘Ρ‚Ρ€ΠΎΠΊΠ° 13 создаСт класс Window , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСтся ΠΎΡ‚ QMainWindow .
  • Π‘Ρ‚Ρ€ΠΎΠΊΠ° 18 устанавливаСт Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π°.
  • Π‘Ρ‚Ρ€ΠΎΠΊΠ° 19 устанавливаСт QLabel Π² качСствС Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°.
  • Π‘Ρ‚Ρ€ΠΎΠΊΠΈ с 20 ΠΏΠΎ 22 Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ частныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… строках для создания Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… элСмСнтов графичСского интСрфСйса:
    • Π‘Ρ‚Ρ€ΠΎΠΊΠΈ с 24 ΠΏΠΎ 26 ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π³Π»Π°Π²Π½ΠΎΠ΅ мСню.
    • Π‘Ρ‚Ρ€ΠΎΠΊΠΈ с 28 ΠΏΠΎ 31 ΡΠΎΠ·Π΄Π°ΡŽΡ‚ панСль инструмСнтов.
    • Π‘Ρ‚Ρ€ΠΎΠΊΠΈ с 33 ΠΏΠΎ 36 ΡΠΎΠ·Π΄Π°ΡŽΡ‚ строку состояния.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Когда Π²Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ графичСского интСрфСйса Π² ΠΈΡ… собствСнном ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅, Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ свой ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ для сопровоТдСния. Однако это Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, поэтому Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ свой ΠΊΠΎΠ΄ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π²Π°ΠΌ нравится.

Когда Π²Ρ‹ запуститС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ:

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² стилС Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

  • Одно Π³Π»Π°Π²Π½ΠΎΠ΅ мСню ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ МСню
  • Одна панСль инструмСнтов с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Кнопка Π²Ρ‹Ρ…ΠΎΠ΄Π°
  • Один Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QLabel )
  • Одна строка состояния Π²Π½ΠΈΠ·Ρƒ ΠΎΠΊΠ½Π°

Π˜Ρ‚Π°ΠΊ, Π²Ρ‹ рассмотрСли Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Ρ… графичСских ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π½Π°Π±ΠΎΡ€Π° Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² PyQt5.Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π΄Π²ΡƒΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… Π²Ρ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ΡΡŒ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ концСпциями, связанными с прилоТСниями PyQt с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ

Π‘Π°ΠΌΡ‹ΠΉ простой класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ PyQt GUI, - это QApplication . Π­Ρ‚ΠΎΡ‚ класс Π»Π΅ΠΆΠΈΡ‚ Π² основС любого прилоТСния PyQt. Он управляСт ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ управлСния ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΅Π³ΠΎ основными настройками. Π’ PyQt любой экзСмпляр QApplication считаСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ . КаТдоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ PyQt GUI Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QApplication .НСкоторыС ΠΈΠ· обязанностСй прилоТСния Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚:

  • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ
  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° событий ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий
  • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° общСсистСмных ΠΈ общСсистСмных настроСк
  • ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ доступа ΠΊ глобальной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ прилоТСния, Ρ€Π°Π·ΠΌΠ΅Ρ€ экрана ΠΈ Ρ‚. Π”.
  • Анализ ΠΎΠ±Ρ‰ΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки
  • ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ внСшнСго Π²ΠΈΠ΄Π° прилоТСния
  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ возмоТностСй Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

Π­Ρ‚ΠΎ лишь Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ QApplication .Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, это Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ класс, ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ PyQt с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ!

Одной ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ QApplication являСтся обСспСчСниС Ρ†ΠΈΠΊΠ»Π° событий ΠΈ всСго ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ рассмотрим Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий.

Π¦ΠΈΠΊΠ»Ρ‹ событий

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ событийно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ . Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° дСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ, Π²Ρ‹Π±ΠΎΡ€ элСмСнта ΠΈΠ· поля со списком, Π²Π²ΠΎΠ΄ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ тСкста ΠΏΡ€ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ тСкста, Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ клавиши Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅ ΠΈ Ρ‚. Π”.Π­Ρ‚ΠΈ дСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ событиями .

Бобытия ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ†ΠΈΠΊΠ»ΠΎΠΌ событий (Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ основным Ρ†ΠΈΠΊΠ»ΠΎΠΌ ). Π¦ΠΈΠΊΠ» событий - это бСсконСчный Ρ†ΠΈΠΊΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ всС события ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ систСмы ΠΈ Π»ΡŽΠ±Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… источников. Π¦ΠΈΠΊΠ» событий ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ возникновСния события, Π° Π·Π°Ρ‚Π΅ΠΌ отправляСт Π΅Π³ΠΎ для выполнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ. Π¦ΠΈΠΊΠ» событий ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΏΠΎΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ.

Π¦ΠΈΠΊΠ»Ρ‹ событий ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ всСми прилоТСниями с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.Π¦ΠΈΠΊΠ» событий - это своСго Ρ€ΠΎΠ΄Π° бСсконСчный Ρ†ΠΈΠΊΠ», ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠΉ наступлСния событий. Если событиС происходит, Ρ†ΠΈΠΊΠ» провСряСт, являСтся Π»ΠΈ событиС событиСм Terminate . Π’ этом случаС Ρ†ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ закрываСтся. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС событиС отправляСтся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ событий прилоТСния для дальнСйшСй ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΈ Ρ†ΠΈΠΊΠ» запускаСтся снова.

Π’ PyQt Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий прилоТСния, Π²Ρ‹Π·Π²Π°Π² .exec_ () для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° QApplication .

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. PyQt Π±Ρ‹Π» Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ для Python 2, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово exec .Π’ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… вСрсиях Π² ΠΊΠΎΠ½Π΅Ρ† .exec_ () добавлялось ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΈΠΌΠ΅Π½.

PyQt5 Π½Π°Ρ†Π΅Π»Π΅Π½ Π½Π° Python 3, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова exec . Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° прСдоставляСт Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΡ… Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий:

  1. .exec_ ()
  2. .exec ()

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ .exec_ () ΠΈΠ· своСго ΠΊΠΎΠ΄Π°, Π° вмСсто этого ΠΌΠΎΠΆΠ΅Ρ‚Π΅ бСзопасно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ .exec () .

Π§Ρ‚ΠΎΠ±Ρ‹ событиС запускало ΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎΠ΅ дСйствиС, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ событиС с дСйствиСм, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ.Π’ PyQt5 Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ это соСдинСниС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сигналов ΠΈ слотов. Π’Ρ‹ расскаТСтС ΠΎΠ± этом Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

Π‘ΠΈΠ³Π½Π°Π»Ρ‹ ΠΈ слоты

Π’ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ PyQt Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΊΠ°ΠΊ ΡƒΠ»Π°Π²Π»ΠΈΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ событий . Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ»Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ количСство событий, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Ρ‰Π΅Π»Ρ‡ΠΊΠΈ ΠΌΡ‹ΡˆΠΈ, наТатия клавиш ΠΈ Ρ‚. Π”. Π’ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° эти события Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ всСгда Π²Ρ‹Π΄Π°ΡŽΡ‚ сигнал , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся своСго Ρ€ΠΎΠ΄Π° сообщСниСм, ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‰ΠΈΠΌ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ своСго состояния.

Π‘ΠΈΠ³Π½Π°Π» сам ΠΏΠΎ сСбС Π½Π΅ выполняСт Π½ΠΈΠΊΠ°ΠΊΠΈΡ… дСйствий.Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сигнал запускал дСйствиС, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΊ слоту . Π­Ρ‚ΠΎ функция ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ дСйствиС ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ сигнала соСдинСния. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Python (ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² ) Π² качСствС слота.

Если сигнал ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊ слоту, Ρ‚ΠΎ слот вызываСтся всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° сигнал испускаСтся. Если сигнал Π½Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ Π½ΠΈ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ слоту, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ происходит ΠΈ сигнал игнорируСтся. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ этого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°:

  • Π‘ΠΈΠ³Π½Π°Π» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ»ΠΈ нСскольким слотам.
  • Π‘ΠΈΠ³Π½Π°Π» Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ связан с Π΄Ρ€ΡƒΠ³ΠΈΠΌ сигналом.
  • Π‘Π»ΠΎΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ»ΠΈ нСскольким сигналам.

Для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ сигнала ΠΊ слоту ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

  widget.signal.connect (slot_function)
  

Π­Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ slot_function ΠΊ widget.signal . ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° испускаСтся сигнал , Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ slot_function () .

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Π°ΠΌ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сигналов ΠΈ слотов:

  1 # Имя Ρ„Π°ΠΉΠ»Π°: signal_slots.Ρ€Ρƒ
 2
 3 "" "ΠŸΡ€ΠΈΠΌΠ΅Ρ€ сигналов ΠΈ слотов." ""
 4
 5import sys
 6
 7ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QApplication
 8ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QLabel
 9ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QPushButton
10 ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ QVBoxLayout
11 ΠΈΠ· PyQt5. QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QWidget
12
13def привСтствиС ():
14 "" "Ѐункция слота." ""
15, Ссли msg.text ():
16 msg.setText ("")
Π•Ρ‰Π΅ 17:
18 msg.setText (Β«ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!Β»)
19
20app = QApplication (sys.argv)
21window = QWidget ()
22window.setWindowTitle ('Π‘ΠΈΠ³Π½Π°Π»Ρ‹ ΠΈ слоты')
23layout = QVBoxLayout ()
24
25btn = QPushButton ('ΠŸΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ')
26btn.clicked.connect (привСтствиС) # ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΠΈΡŽ ()
27
28layout.addWidget (btn)
29msg = QLabel ('')
30layout.addWidget (сообщСниС)
31window.setLayout (ΠΌΠ°ΠΊΠ΅Ρ‚)
32window.show ()
33sys.exit (ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.exec_ ())
  

Π’ строкС 13 Π²Ρ‹ создаСтС привСтствиС () , ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС слота. Π—Π°Ρ‚Π΅ΠΌ Π² строкС 26 Π²Ρ‹ соСдиняСтС сигнал ΠΊΠ½ΠΎΠΏΠΊΠΈ clicked с привСтствиСм () . Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠ½ΠΎΠΏΠΊΡƒ, вызываСтся welcome () , ΠΈ msg Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ сообщСниСм Hello World! ΠΈ пустая строка:

Когда Π²Ρ‹ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚Π΅ Greet , появляСтся Hello World! Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ появится ΠΈ исчСзнСт Π½Π° вашСм экранС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ собствСнный Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… сигналов. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈΡ… Π½Π° страницС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°.

Если ваша функция слота Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΡ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ functools.partial . НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ привСтствиС () ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  def привСтствиС (ΠΊΡ‚ΠΎ):
    "" "Ѐункция слота." ""
    Ссли msg.text ():
        msg.setText ('')
    Π΅Ρ‰Π΅:
        msg.setText (Ρ„'ΠŸΡ€ΠΈΠ²Π΅Ρ‚ {ΠΊΡ‚ΠΎ} ')
  

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, welcome () Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ who .Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ эту Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ welcome () с сигналом btn.clicked , Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ этого:

  btn.clicked.connect (functools.partial (привСтствиС, Β«ΠœΠΈΡ€!Β»))
  

Π§Ρ‚ΠΎΠ±Ρ‹ этот ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π», Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ сначала ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ functools . Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ functools.partial () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π΅Π΄Π΅Ρ‚ сСбя Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π²Ρ‹Π·ΠΎΠ²Ρƒ welcome () с who = 'World!' . Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠ½ΠΎΠΏΠΊΡƒ, появляСтся сообщСниС Β«Hello World!Β». Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π½Π° этикСткС Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ лямбда для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ сигнала ΠΊ слоту, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π’ качСствС практичСского упраТнСния ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ лямбда вмСсто functools.partial () .

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сигналов ΠΈ слотов - это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π΄ΠΎΡ…Π½ΡƒΡ‚ΡŒ Тизнь Π² свои прилоТСния с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ PyQt5. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ события Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ дСйствия. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π³Π»ΡƒΠ±ΠΆΠ΅ ΠΏΠΎΠ³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΡΡ Π² ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сигналов ΠΈ слотов, взглянув Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ PyQt5.

На этом Π²Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ рассмотрСниС Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ PyQt5. Обладая этими знаниями ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉΡΡ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ собствСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Ρ‹ создадитС своС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΠΎΠ»Π½ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с графичСским ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ интСрфСйсом.

Π”Π°Π²Π°ΠΉ!

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° с Python ΠΈ PyQt

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ шаблон проСктирования модСль-прСдставлСниС-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ (MVC). Π­Ρ‚ΠΎΡ‚ шаблон ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ уровня ΠΊΠΎΠ΄Π°, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ролями:

  1. МодСль заботится ΠΎ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠ΅ вашСго прилоТСния.Он содСрТит основныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅. Для вашСго ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° модСль Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ вычислСния.

  2. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ графичСский интСрфСйс вашСго прилоТСния. На Π½Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ всС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ для взаимодСйствия с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ дСйствия ΠΈ события. Для вашСго ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° прСдставлСниСм Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΊΠ½ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π° экранС.

  3. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ соСдиняСт модСль ΠΈ прСдставлСниС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ.ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ события (ΠΈΠ»ΠΈ запросы) ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ заставляСт модСль Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Когда модСль прСдоставляСт Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ (ΠΈΠ»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅) Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ пСрСсылаСт Π΅Π³ΠΎ Π² прСдставлСниС. Для вашСго ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ события ΠΈΠ· графичСского интСрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Ρƒ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ вычислСний ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ графичСский интСрфСйс с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ.

Π’ΠΎΡ‚ ΠΏΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΉ шаблон MVC для Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ прилоТСния с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ:

  1. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ выполняСт дСйствиС ΠΈΠ»ΠΈ запрос (событиС) Π² прСдставлСнии (GUI).
  2. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ увСдомляСт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΎ дСйствии ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.
  3. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ запрос ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Ρƒ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΡ‚Π²Π΅Ρ‚.
  4. МодСль ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ запрос ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°, выполняСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚ ΠΈΠ»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.
  5. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ обновляСт прСдставлСниС.
  6. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΊΠΎΠ½Π΅Ρ† Π²ΠΈΠ΄ΠΈΡ‚ Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² прСдставлСнии.

Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот шаблон проСктирования MVC для создания ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ скСлСта

Π’Ρ‹ Π½Π°Ρ‡Π½Π΅Ρ‚Π΅ с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ каркаса для вашСго прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся pycalc.py . Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ этот скрипт ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ исходный ΠΊΠΎΠ΄ ΠΏΠΎ ссылкС Π½ΠΈΠΆΠ΅:

Если Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ создайтС pycalc.py Π² вашСм Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Π—Π°Ρ‚Π΅ΠΌ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΊΠΎΠ΄Π° ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

  #! / Usr / bin / env python3

# Имя Ρ„Π°ΠΉΠ»Π°: pycalc.Ρ€Ρƒ

"" "PyCalc - это простой ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€, построСнный с использованиСм Python ΠΈ PyQt5." ""

import sys

# Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QApplication ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ ΠΈΠ· PyQt5.QtWidgets
ΠΈΠ· PyQt5.QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QApplication
ΠΈΠ· PyQt5.QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QMainWindow
ΠΈΠ· PyQt5.QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QWidget

__version__ = '0,1'
__author__ = 'ЛСоданис Посо Рамос'

# Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ подкласс QMainWindow для настройки графичСского интСрфСйса ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°
класс PyCalcUi (QMainWindow):
    "" "ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ PyCalc (GUI)." ""
    def __init __ (сам):
        "" "ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°."" "
        супСр () .__ init __ ()
        # Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ свойства Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°
        self.setWindowTitle ('PyCalc')
        self.setFixedSize (235, 235)
        # Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚
        self._centralWidget = QWidget (сам)
        self.setCentralWidget (self._centralWidget)

# ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈΠΉ ΠΊΠΎΠ΄
def main ():
    """Основная функция."""
    # Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр QApplication
    pycalc = QApplication (sys.argv)
    # ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ графичСский интСрфСйс ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°
    view = PyCalcUi ()
    view.show ()
    # Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ основной Ρ†ΠΈΠΊΠ» ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°
    sys.Π²Ρ‹Ρ…ΠΎΠ΄ (pycalc.exec_ ())

Ссли __name__ == '__main__':
    Π³Π»Π°Π²Π½Ρ‹ΠΉ()
  

Π­Ρ‚ΠΎΡ‚ сцСнарий Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ вСсь ΠΊΠΎΠ΄, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для запуска Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ прилоТСния с графичСским интСрфСйсом. Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот скСлСт, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ свой ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

  • Π‘Ρ‚Ρ€ΠΎΠΊΠΈ с 10 ΠΏΠΎ 12 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ классы ΠΈΠ· PyQt5.QtWidgets .

  • Π‘Ρ‚Ρ€ΠΎΠΊΠ° 18 создаСт графичСский интСрфСйс с классом PyCalcUi . ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ этот класс наслСдуСтся ΠΎΡ‚ QMainWindow .

  • Π‘Ρ‚Ρ€ΠΎΠΊΠ° 24 устанавливаСт Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π° Π½Π° PyCalc .

  • Π‘Ρ‚Ρ€ΠΎΠΊΠ° 25 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ .setFixedSize () , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ ΠΎΠΊΠ½Ρƒ фиксированный Ρ€Π°Π·ΠΌΠ΅Ρ€. Π­Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ смоТСт ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠΊΠ½Π°.

  • Π‘Ρ‚Ρ€ΠΎΠΊΠ° 27 создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QWidget , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ³Ρ€Π°Π΅Ρ‚ Ρ€ΠΎΠ»ΡŒ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ваш класс GUI наслСдуСтся ΠΎΡ‚ QMainWindow , Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚.Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ для ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ части ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° графичСского интСрфСйса.

  • Π‘Ρ‚Ρ€ΠΎΠΊΠ° 31 опрСдСляСт ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ вашСго ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°, Ρ‡Ρ‚ΠΎ считаСтся ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²ΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ. Π­Ρ‚Π° функция Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π²Ρ…ΠΎΠ΄Π° Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’Π½ΡƒΡ‚Ρ€ΠΈ main () ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выполняСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия:

    • Π‘Ρ‚Ρ€ΠΎΠΊΠ° 34 создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QApplication pycalc .
    • Π‘Ρ‚Ρ€ΠΎΠΊΠ° 37 ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ графичСский интСрфСйс с прСдставлСниСм .ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ () .
    • Π‘Ρ‚Ρ€ΠΎΠΊΠ° 39 запускаСт Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий прилоТСния с pycalc.exec_ () .

Когда Π²Ρ‹ запуститС скрипт, Π½Π° вашСм экранС появится ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ:

Π­Ρ‚ΠΎ скСлСт вашСго графичСского интСрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠ±Π·ΠΎΡ€Π°

Π˜ΠΌΠ΅ΡŽΡ‰ΠΈΠΉΡΡ Ρƒ вас графичСский интСрфСйс Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠΌ графичСский интСрфСйс, Π΄ΠΎΠ±Π°Π²ΠΈΠ² дисплСй ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ для чисСл. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ для основных матСматичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ очистки дисплСя.

Π‘Π½Π°Ρ‡Π°Π»Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π² Π½Π°Ρ‡Π°Π»ΠΎ Ρ„Π°ΠΉΠ»Π°:

  ΠΈΠ· PyQt5.QtCore import Qt
ΠΈΠ· PyQt5.QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QGridLayout
ΠΈΠ· PyQt5.QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QLineEdit
ΠΈΠ· PyQt5.QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QPushButton
ΠΈΠ· PyQt5.QtWidgets ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QVBoxLayout
  

Π’Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ QVBoxLayout для ΠΎΠ±Ρ‰Π΅ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QGridLayout для располоТСния ΠΊΠ½ΠΎΠΏΠΎΠΊ. НаконСц, Π²Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ QLineEdit для дисплСя ΠΈ QPushButton для ΠΊΠ½ΠΎΠΏΠΎΠΊ.Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части Ρ„Π°ΠΉΠ»Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ восСмь ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ для PyCalcUi :

  # Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ подкласс QMainWindow для настройки графичСского интСрфСйса ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°
класс PyCalcUi (QMainWindow):
    "" "ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ PyCalc (GUI)." ""
    def __init __ (сам):
        "" "ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°." ""
        супСр () .__ init __ ()
        # Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ свойства Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°
        self.setWindowTitle ('PyCalc')
        self.setFixedSize (235, 235)
        # УстановитС Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ΠΈ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΌΠ°ΠΊΠ΅Ρ‚
        сСбя.generalLayout = QVBoxLayout ()
        self._centralWidget = QWidget (сам)
        self.setCentralWidget (self._centralWidget)
        self._centralWidget.setLayout (self.generalLayout)
        # БоздаСм дисплСй и кнопки
        self._createDisplay ()
        self._createButtons ()
  

Π—Π΄Π΅ΡΡŒ Π²Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ строки ΠΊΠΎΠ΄Π°. Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ QVBoxLayout , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ дисплСй Π²Π²Π΅Ρ€Ρ…Ρƒ, Π° ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² Π²ΠΈΠ΄Π΅ сСтки Π²Π½ΠΈΠ·Ρƒ.

Π—Π²ΠΎΠ½ΠΊΠΈ Π½Π° ._createDisplay () ΠΈ ._createButtons () Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΅Ρ‰Π΅ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π”Π°Π²Π°ΠΉΡ‚Π΅ исправим это, написав ._createDisplay () :

.
  класс PyCalcUi (QMainWindow):
    # Snip
    def _createDisplay (сам):
        "" "Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ дисплСй." ""
        # Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ отобраТСния
        self.display = QLineEdit ()
        # Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ свойства дисплСя
        self.display.setFixedHeight (35)
        self.display.setAlignment (Qt.AlignRight)
        сСбя.display.setReadOnly (Π˜ΡΡ‚ΠΈΠ½Π°)
        # Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΎΠ±Ρ‰ΠΈΠΉ ΠΌΠ°ΠΊΠ΅Ρ‚
        self.generalLayout.addWidget (self.display)
  

Для создания Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° отобраТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QLineEdit . Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ устанавливаСтС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ свойства отобраТСния:

  • ДисплСй ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ высоту 35 пиксСлСй.
  • На дисплСС отобраТаСтся тСкст с Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎ Π»Π΅Π²ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ.
  • ДисплСй настроСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ прямого рСдактирования.

ПослСдняя строка добавляСт дисплСй ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ ΠΌΠ°ΠΊΠ΅Ρ‚Ρƒ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° с generalLayout.addWidget () .

Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚Π΅ ._createButtons () для создания ΠΊΠ½ΠΎΠΏΠΎΠΊ для вашСго ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°. Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ тСкст ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ Π΅Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² сСткС. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ QGridLayout , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² ΠΎΠΊΠ½Π΅ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°. ΠžΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

  класс PyCalcUi (QMainWindow):
    # Snip
    def _createButtons (сам):
        "" "Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ." ""
        self.buttons = {}
        buttonsLayout = QGridLayout ()
        # ВСкст ΠΊΠ½ΠΎΠΏΠΊΠΈ | позиция Π² QGridLayout
        ΠΊΠ½ΠΎΠΏΠΊΠΈ = {'7': (0, 0),
                   '8': (0, 1),
                   '9': (0, 2),
                   '/': (0, 3),
                   'C': (0, 4),
                   '4': (1, 0),
                   '5': (1, 1),
                   '6': (1, 2),
                   '*': (1, 3),
                   '(': (1, 4),
                   '1': (2, 0),
                   '2': (2, 1),
                   '3': (2, 2),
                   '-': (2, 3),
                   ')': (2, 4),
                   '0': (3, 0),
                   '00': (3, 1),
                   '.': (3, 2),
                   '+': (3, 3),
                   '=': (3, 4),
                  }
        # Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΈΡ… Π² ΠΌΠ°ΠΊΠ΅Ρ‚ сСтки
        для btnText, pos в buttons.items ():
            self.buttons [btnText] = QPushButton (btnText)
            self.buttons [btnText] .setFixedSize (40, 40)
            buttonsLayout.addWidget (self.buttons [btnText], pos [0], pos [1])
        # Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ buttonLayout Π² ΠΎΠ±Ρ‰ΠΈΠΉ ΠΌΠ°ΠΊΠ΅Ρ‚
        self.generalLayout.addLayout (buttonsLayout)
  

Π‘Π½Π°Ρ‡Π°Π»Π° Π²Ρ‹ создаСтС пустой ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ self.ΠΊΠ½ΠΎΠΏΠΊΠΈ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ создаСтС Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ для хранСния ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ Π² ΠΌΠ°ΠΊΠ΅Ρ‚Π΅ сСтки ( buttonsLayout ). Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° for Π²Ρ‹ создаСтС ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ добавляСтС ΠΈΡ… ΠΊ self.buttons ΠΈ buttonsLayout . КаТдая ΠΊΠ½ΠΎΠΏΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ фиксированный Ρ€Π°Π·ΠΌΠ΅Ρ€ 40x40 пиксСлСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ устанавливаСтС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ .setFixedSize (40, 40) .

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π§Ρ‚ΠΎ касаСтся Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°, Π²Ρ‹ Ρ€Π΅Π΄ΠΊΠΎ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ измСрСния Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ PyQt.ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ΠΈΡ†Π° измСрСния составляСт пиксСлСй (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ QPrinter , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΡ‡Π΅ΠΊ ).

Π’Π΅ΠΏΠ΅Ρ€ΡŒ графичСский интСрфСйс (ΠΈΠ»ΠΈ прСдставлСниС) ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ дисплСй ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ. Но ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π½Π΅Ρ‚ возмоТности ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡƒΡŽ Π½Π° дисплСС. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это, Π΄ΠΎΠ±Π°Π²ΠΈΠ² нСсколько Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

  1. .setDisplayText () для установки ΠΈ обновлСния тСкста Π½Π° дисплСС
  2. .displayText () для получСния тСкста Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ дисплСя
  3. .clearDisplay () для очистки тСкста Π½Π° дисплСС

Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ интСрфСйс графичСского интСрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ класс прСдставлСния для вашСго ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Python. Π’ΠΎΡ‚ возмоТная рСализация:

  класс PyCalcUi (QMainWindow):
    # Snip
    def setDisplayText (сам, тСкст):
        "" "Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ тСкст." ""
        self.display.setText (тСкст)
        self.display.setFocus ()

    def displayText (self):
        "" "ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ тСкст." ""
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ self.display.тСкст()

    def clearDisplay (сам):
        "" "ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ дисплСй." ""
        self.setDisplayText ('')
  

Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ каТдая функция:

  • .setDisplayText () ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ .setText () для установки ΠΈ обновлСния тСкста Π½Π° дисплСС ΠΈ .setFocus () для установки фокуса курсора Π½Π° дисплСС.

  • .displayText () - это ΠΌΠ΅Ρ‚ΠΎΠ΄ получСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ тСкст дисплСя.Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ‰Π΅Π»ΠΊΠ°Π΅Ρ‚ Π·Π½Π°ΠΊ равСнства ( = ), ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ .displayText () Π² качСствС матСматичСского выраТСния для ΠΎΡ†Π΅Π½ΠΊΠΈ.

  • .clearDisplay () устанавливаСт тСкст дисплСя Π² ΠΏΡƒΡΡ‚ΡƒΡŽ строку ( '' ), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠ³ ввСсти Π½ΠΎΠ²ΠΎΠ΅ матСматичСскоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ графичСский интСрфСйс вашСго ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π³ΠΎΡ‚ΠΎΠ²! Когда Π²Ρ‹ запуститС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ:

Π’Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρƒ с графичСским интСрфСйсом ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°.Однако, Ссли Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ произвСсти ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ вычислСния, Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ ΠΏΠΎΠΊΠ° Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ модСль ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ Тизнь Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Ρƒ.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ класс ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°. Π­Ρ‚ΠΎΡ‚ класс свяТСт Π²ΠΈΠ΄ с модСлью. Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ выполнял дСйствия Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ события.Π’Ρ‹ Π½Π°Ρ‡Π½Π΅Ρ‚Π΅ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°:

  ΠΈΠ· functools import partial
  

Π’Π²Π΅Ρ€Ρ…Ρƒ pycalc.py Π²Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ partial () для соСдинСния сигналов с ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹.

Π’Π°Ρˆ класс ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ основныС Π·Π°Π΄Π°Ρ‡ΠΈ:

  1. Доступ ΠΊ общСдоступному интСрфСйсу графичСского интСрфСйса
  2. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° создания матСматичСских Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ
  3. Кнопка ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π°ΠΆΠ°Ρ‚Π° сигнала с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ слотами

Π­Ρ‚ΠΎ обСспСчит ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ вашСго ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°.Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Π²Ρ‹ ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ класс ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°:

  # Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ класс ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ графичСского интСрфСйса ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ
класс PyCalcCtrl:
    "" "Класс ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° PyCalc." ""
    def __init __ (я, просмотр):
        "" "Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°." ""
        self._view = просмотр
        # ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ сигналы ΠΈ слоты
        self._connectSignals ()

    def _buildExpression (self, sub_exp):
        "" "ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅." ""
        Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ = self._view.displayText () + sub_exp
        self._view.setDisplayText (Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅)

    def _connectSignals (сам):
        "" "ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ сигналы ΠΈ слоты."" "
        для btnText, btn в self._view.buttons.items ():
            Ссли btnText отсутствуСт Π² {'=', 'C'}:
                btn.clicked.connect (частичноС (self._buildExpression, btnText))

        self._view.buttons ['C']. clicked.connect (self._view.clearDisplay)
  

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅, это Π΄Π°Π΅Ρ‚Π΅ PyCalcCtrl экзСмпляр прСдставлСния PyCalcUi . Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот экзСмпляр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ доступ ΠΊ общСдоступному интСрфСйсу прСдставлСния. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ создаСтС ._buildExpression () для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ создания матСматичСских Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚Π°ΠΊΠΆΠ΅ обновляСт дисплСй ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° Π²Π²ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

НаконСц, Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ._connectSignals () для соСдинСния ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹Ρ… ΠΊΠ½ΠΎΠΏΠΎΠΊ с ._buildExpression () . Π­Ρ‚ΠΎ позволяСт вашим ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ матСматичСскиС выраТСния, наТимая ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°. Π’ послСднСй строкС Π²Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ очистки ( C ) ΠΊ ._view.clearDisplay () . Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ очистит тСкст Π½Π° дисплСС.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ этого Π½ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ main () :

  # Код ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°
def main ():
    """Основная функция."" "
    # Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр QApplication
    pycalc = QApplication (sys.argv)
    # ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ графичСский интСрфСйс ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°
    view = PyCalcUi ()
    view.show ()
    # Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ экзСмпляры ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°
    PyCalcCtrl (просмотр = просмотр)
    # Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ основной Ρ†ΠΈΠΊΠ» ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°
    sys.exit (pycalc.exec_ ())
  

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ создаСт экзСмпляр PyCalcCtrl (view = view) с прСдставлСниСм , ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΌ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Π­Ρ‚ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ сигналы ΠΈ слоты, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Ρƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Если Π²Ρ‹ запуститС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ:

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π² ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π΅ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ матСматичСскиС выраТСния, наТимая Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠΈ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π·Π½Π°ΠΊ равСнства ( = ) Π΅Ρ‰Π΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ модСль ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°.

РСализация ΠΌΠΎΠ΄Π΅Π»ΠΈ

МодСль - это ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΊΠΎΠ΄Π°, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ. Π’ этом случаС бизнСс-Π»ΠΎΠ³ΠΈΠΊΠ° - это основныС матСматичСскиС вычислСния.Π’Π°ΡˆΠ° модСль Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ матСматичСскиС выраТСния, Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ вашими ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ модСль Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ошибки, Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ константу:

Π­Ρ‚ΠΎ сообщСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚, Ссли Π²Π²Π΅Π΄Π΅Ρ‚ нСдопустимоС матСматичСскоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Π£ вашСй ΠΌΠΎΠ΄Π΅Π»ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ одиночная функция:

  # Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ модСль для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°
def AssessmentExpression (Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅):
    "" "ΠžΡ†Π΅Π½ΠΈΡ‚Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅." ""
    ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ:
        Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = str (eval (Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, {}, {}))
    ΠΊΡ€ΠΎΠΌΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:
        Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = ERROR_MSG

    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
  

Π—Π΄Π΅ΡΡŒ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ eval () для ΠΎΡ†Π΅Π½ΠΊΠΈ строки ΠΊΠ°ΠΊ выраТСния.Π’ случаС успСха Π²Ρ‹ Π²Π΅Ρ€Π½Π΅Ρ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π²Ρ‹ Π²Π΅Ρ€Π½Π΅Ρ‚Π΅ сообщСниС ΠΎΠ± ошибкС. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ эта функция Π½Π΅ идСальна. Π£ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π° Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ:

  • Π‘Π»ΠΎΠΊ try ... except Π½Π΅ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π΅ являСтся Π»ΡƒΡ‡ΡˆΠ΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ Π² ​​Python.
  • Ѐункция основана Π½Π° использовании eval () , Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ с Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ. ΠžΠ±Ρ‰ΠΈΠΉ совСт - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ eval () Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π΅ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ ΠΈ бСзопасной. Π’ этом руководствС Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ.

Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ модСль ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€. ΠžΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ вСрсия PyCalcCtrl Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ вычислСний ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π·Π½Π°ΠΊΠ° равСнства ( = ):

  # Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ класс ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ графичСского интСрфСйса ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ
класс PyCalcCtrl:
    "" "ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ PyCalc."" "
    def __init __ (я, модСль, прСдставлСниС):
        "" "Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°." ""
        self._evaluate = модСль
        self._view = просмотр
        # ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ сигналы ΠΈ слоты
        self._connectSignals ()

    def _calculateResult (сам):
        "" "ΠžΡ†Π΅Π½ΠΈΡ‚Π΅ выраТСния." ""
        Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = self._evaluate (Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ = self._view.displayText ())
        self._view.setDisplayText (Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚)

    def _buildExpression (self, sub_exp):
        "" "ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅." ""
        Ссли self._view.displayText () == ERROR_MSG:
            сСбя._view.clearDisplay ()

        Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ = self._view.displayText () + sub_exp
        self._view.setDisplayText (Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅)

    def _connectSignals (сам):
        "" "ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ сигналы ΠΈ слоты." ""
        для btnText, btn в self._view.buttons.items ():
            Ссли btnText отсутствуСт Π² {'=', 'C'}:
                btn.clicked.connect (частичноС (self._buildExpression, btnText))

        self._view.buttons ['=']. clicked.connect (self._calculateResult)
        self._view.display.returnPressed.connect (self._calculateResult)
        сСбя._view.buttons ['C']. clicked.connect (self._view.clearDisplay)
  

Π’Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ строки ΠΊΠΎΠ΄Π°. Π‘Π½Π°Ρ‡Π°Π»Π° Π²Ρ‹ добавляСтС Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ класс ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ экзСмпляры ΠΊΠ°ΠΊ ΠΎΡ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈ, Ρ‚Π°ΠΊ ΠΈ ΠΎΡ‚ прСдставлСния. Π—Π°Ρ‚Π΅ΠΌ Π² ._calculateResult () Π²Ρ‹ Π±Π΅Ρ€Π΅Ρ‚Π΅ содСрТимоС дисплСя, ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚Π΅ Π΅Π³ΠΎ ΠΊΠ°ΠΊ матСматичСскоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π° дисплСС.

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ добавляСтС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ if ΠΊ ._buildExpression () , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° Π»ΠΈ ошибка.Если Π΄Π°, Ρ‚ΠΎ Π²Ρ‹ ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚Π΅ дисплСй ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ Π·Π°Π½ΠΎΠ²ΠΎ с Π½ΠΎΠ²ΠΎΠ³ΠΎ выраТСния. НаконСц, Π²Ρ‹ добавляСтС Π΅Ρ‰Π΅ Π΄Π²Π° соСдинСния Π²Π½ΡƒΡ‚Ρ€ΠΈ ._connectSignals () . ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π·Π½Π°ΠΊ равСнства ( = ). Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΌΠ΅Ρ‚ Enter , ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ оТидалось.

Π§Ρ‚ΠΎΠ±Ρ‹ вСсь этот ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π», Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ main () :

  # Код ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°
def main ():
    """Основная функция."""
    # Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ экзСмпляр `QApplication`
    pycalc = QApplication (sys.argv)
    # ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ графичСский интСрфСйс ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°
    view = PyCalcUi ()
    view.show ()
    # Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ экзСмпляры ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°
    модСль = ΠΎΡ†Π΅Π½ΠΊΠ°Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
    PyCalcCtrl (модСль = модСль, прСдставлСниС = прСдставлСниС)
    # Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ основной Ρ†ΠΈΠΊΠ» ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°
    sys.exit (pycalc.exec_ ())
  

Π—Π΄Π΅ΡΡŒ ваша модСль содСрТит ссылку Π½Π° AssessmentExpression () . ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, PyCalcCtrl () Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: модСль ΠΈ прСдставлСниС .

Запуск ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ ΠΊΠΎΠ΄, ΠΏΡ€ΠΈΡˆΠ»ΠΎ врСмя ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ! Если Π²Ρ‹ запуститС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ этого:

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ PyCalc, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΡ‹ΡˆΠΈ допустимоС матСматичСскоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.Π—Π°Ρ‚Π΅ΠΌ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ , Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΈΠ»ΠΈ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π·Π½Π°ΠΊ равСнства ( = ), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π° дисплСС ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°.

ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΡŽ! Π’Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ своС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΠΎΠ»Π½ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python ΠΈ PyQt!

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠΠ°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Π΅ прилоТСния с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (GUI) ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ долю Ρ€Ρ‹Π½ΠΊΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. Python ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ нСсколько Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ соврСмСнныС ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Π΅ прилоТСния с графичСским интСрфСйсом.

Π’ этом руководствС Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ PyQt, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· самых популярных ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° Python. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Python ΠΈ PyQt для создания соврСмСнных Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅:

  • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ графичСских ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… интСрфСйсов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python ΠΈ PyQt
  • БвяТитС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ события с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌΠΈ дСйствиями Π² вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ
  • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Python ΠΈ PyQt, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π΄ΠΎΡ…Π½ΡƒΡ‚ΡŒ Тизнь Π² свои Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Π΅ прилоТСния с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ! Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° ΠΈ всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° ΠΏΠΎ ссылкС Π½ΠΈΠΆΠ΅:

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π³Π»ΡƒΠ±ΠΆΠ΅ ΠΏΠΎΠ³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΡΡ Π² PyQt ΠΈ связанныС с Π½ΠΈΠΌ инструмСнты, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· этих рСсурсов:

Π₯отя докумСнтация PyQt5 являСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ рСсурсом, пСрСчислСнным здСсь, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ части всС Π΅Ρ‰Π΅ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈΠ»ΠΈ Π½Π΅ΠΏΠΎΠ»Π½Ρ‹.К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ PyQt4, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹. Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ классов особСнно ΠΏΠΎΠ»Π΅Π·Π΅Π½ для получСния ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ понимания Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² ΠΈ классов.

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ PyQt4 Π² качСствС справочника для классов PyQt5, ΠΈΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ классы Π±ΡƒΠ΄ΡƒΡ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ вСсти сСбя ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто этого ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Qt v5 ΠΈ Π΅Π΅ справочник ΠΏΠΎ классам. Π’ этом случаС Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с C ++, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π·Ρ†Ρ‹ ΠΊΠΎΠ΄Π°.

.