Доступ к списку аргументов командной строки из PyQt

В примере ниже создается окно с меткой и кнопкой. Текст в метке и в заголовке окна определяется переданным вторым и третьим аргументами при вызове программы из командной строки.Поскольку программу можно вызвать без передачи этих аргументов, то такой случай обрабатывается инструкцией if-else.

Список аргументов можно получить командой QtGui.qApp.argv(). Здесь атрибут qApp модуля QtGui позволяет получить доступ к объекту приложения, в данном случае связанному с переменной app.

app = QtGui.QApplication(sys.argv)
arg = QtGui.qApp.argv() # the argument list
window = QtGui.QWidget()

9.3. Первый взгляд на классы

Классы вводят немного нового синтаксиса, три новых объектных типа и некоторую новую семантику.

9.3.1. Синтаксис определения класса

Простейшая форма определения класса выглядит следующим образом:

class ClassName:
    <statement-1>
    .
    .
    .
    <statement-N>

Определения классов, как и определения функций (оператор def), должны быть выполнены до их вызова. (Предпложительно вы может поместить определение класса в ветке оператора if или внутри функции.)

9.2. Области видимости и пространства имен в Python

Перед введением в классы, сначала необходимо кое-что сказать о правилах областей видимости в Python. Определения классов выполняют небольшие трюки с пространствами имен, и вы должны знать, как работают области видимости и пространства имен, чтобы хорошо понимать, что происходит. Кстати, знания в этой области полезны для любого продвинутого программиста на Python.

Давайте начнем с некоторых определений.

9.1. Несколько слов об именах и объектах

У объектов есть индивидуальность, и несколько имен (в несколько областях видимости) могут быть связаны с одним и тем же объектом. Это известно как использование псевдонимов (aliasing) в других языках. Обычно это не принимается во внимание при первом знакомстве с Python, и это можно спокойно игнорировать при работе с неизменными основными типами (числами, строками, кортежами). С другой стороны, использование псевдонимов предоставляет возможность неожиданного эффекта от семантики кода Python с участием изменяемых объектов, таких как списки, словари и множества других типов.

9. Классы (Classes)

По сравнению с другими языками программирования, механизм классов Python добавляет классы с минимумом нового синтаксиса и семантики. Это смесь механизмов класса похожих на C++ и Modula-3. Классы Python предоставляют все стандартные возможности объектно-ориентированного программирования: механизм наследования классов позволяет использовать несколько базовых классов, производный класс может переопределить любые методы его базового класса или классов, а метод может вызвать метод базового класса с тем же именем. Объекты могут содержать произвольные количество и типы данных.

8.7. Предопределенные завершающие действия (Predefined Clean-up Actions)

Для некоторых объектов определены стандартные завершающие действия, которые должны быть предприняты, когда объект больше не нужен, независимо от того, прошли ли операции, использующие объект успешно или возникла ошибка. Посмотрите на следующий пример, где происходит открытие файла и вывод его содержимого на экран.

for line in open("myfile.txt"):
    print(line, end="")

8.6. Определение завершающих действий (Defining Clean-up Actions)

Оператор try (docs.python.org/3/reference/compound_stmts.html#try) имеет другую дополнительную ветку, которая предназначена для определения завершающих действий, которые должны быть выполнены при любых обстоятельствах. Например:

>>> try:
...     raise KeyboardInterrupt
... finally:
...     print('Goodbye, world!')
...
Goodbye, world!
KeyboardInterrupt

8.5. Пользовательские исключения (User-defined Exceptions)

В программах можно создавать свои собственные исключения, создав новый класс исключения (см. Classes (docs.python.org/3/tutorial/classes.html#tut-classes) для подробной информации о классах Python). Исключения должны быть получены от класса Exception (docs.python.org/3/library/exceptions.html#Exception), прямо или опосредованно. Например:

>>> class MyError(Exception):
...     def __init__(self, value):
...         self.value = value
...     def __str__(self):
...         return repr(self.value)
...
>>> try:
...     raise MyError(2*2)

8.4. Вызов исключений (Raising Exceptions)

Оператор raise (docs.python.org/3/reference/simple_stmts.html#raise) позволяет программисту сгенерировать указанное исключение. Например:

>>> raise NameError('HiThere')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
NameError: HiThere

В единственном аргументе raise указывается исключение, которое будет вызвано. Оно должно быть либо экземпляром исключения, либо классом исключения (дочерним по отношению к Exception (docs.python.org/3/library/exceptions.html#Exception)).

8.3. Обработка исключений

Можно писать программы, которые обрабатывают определенные исключения. Посмотрите на следующий пример, который запрашивает у пользователя ввод до тех пор, пока он не введет допустимое целое число, но позволяет пользователю прервать программу (с помощью Control-C или того, что поддерживает конкретная операционная система); обратите внимание, что сгенерированное пользователем прерывание возникает как исключение KeyboardInterrupt (docs.python.org/3/library/exceptions.html#KeyboardInterrupt) (клавиатурное прерывание).

>>> while True:
...     try:

Syndicate content