Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 29, 2015 15:22:37

kukuruku11
Зарегистрирован: 2015-06-18
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4. Не отображается кнопка в окне приложения

Доброго времени суток! Начал освоение qt4, перерабатываю код с разных материалов и возник вопрос. Почему при исполнении этого кода не выводится кнопка закрытия в окне? Напутал с классом или неправильно координаты задал?
Фунция window_close_button

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui, QtCore
# create new class main window
class WindowApp(QtGui.QMainWindow):
    def __init__(self):
        super(WindowApp, self).__init__()
        self.window_geometry()
        self.window_close_button()
# window geometry
    def window_geometry(self):
        self.setGeometry(300, 300, 600,900)
        self.setWindowTitle('test_gui')
        self.window_position()
        self.show()
        
# window position
    def window_position(self):
        qr = self.frameGeometry()
        center_pos = QtGui.QDesktopWidget().availableGeometry().center()
        qr.moveCenter(center_pos)
        self.move(qr.topLeft())
# button close
    def window_close_button(self):
        quit_button = QtGui.QPushButton('Close', self)
        quit_button.clicked.connect(QtCore.QCoreApplication.instance().quit)
        quit_button.resize(quit_button.sizeHint())
        quit_button.move(250,850)
# main
def main():
    app = QtGui.QApplication(sys.argv)
    main_window=WindowApp()
    sys.exit(app.exec_())
    
if __name__ == '__main__':
    main()

И какие ресурсы вы можете посоветовать для разбора pyqt4? Спасибо

Отредактировано kukuruku11 (Июнь 29, 2015 15:35:21)

Офлайн

#2 Июнь 29, 2015 15:42:36

kukuruku11
Зарегистрирован: 2015-06-18
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4. Не отображается кнопка в окне приложения

kukuruku11
Доброго времени суток! Начал освоение qt4, перерабатываю код с разных материалов и возник вопрос. Почему при исполнении этого кода не выводится кнопка закрытия в окне? Напутал с классом или неправильно координаты задал? Фунция window_close_button

Кажется разобрался. Кнопка отображается корректно при включении кода из функции window_close_button в функцию window_geometry:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui, QtCore
# create new class main window
class WindowApp(QtGui.QMainWindow):
    def __init__(self):
        super(WindowApp, self).__init__()
        self.window_geometry()
        
# window geometry
    def window_geometry(self):
        self.setGeometry(300, 300, 600,900)
        
        quit_button = QtGui.QPushButton('Close', self)
        quit_button.clicked.connect(QtCore.QCoreApplication.instance().quit)
        quit_button.resize(quit_button.sizeHint())
        quit_button.move(250,850)
        self.setWindowTitle('test_gui')
        self.window_position()
        self.show()
        
# window position
    def window_position(self):
        qr = self.frameGeometry()
        center_pos = QtGui.QDesktopWidget().availableGeometry().center()
        qr.moveCenter(center_pos)
        self.move(qr.topLeft())
# main
def main():
    app = QtGui.QApplication(sys.argv)
    main_window=WindowApp()
    sys.exit(app.exec_())
    
if __name__ == '__main__':
    main()

Тогда вопрос изменяется. Почему код работает в этом виде? Мы можем разнести разные элеметны окна в разные функции, как это сделано в первом варианте?

Отредактировано kukuruku11 (Июнь 29, 2015 15:58:40)

Офлайн

#3 Июнь 29, 2015 16:14:57

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

PyQt4. Не отображается кнопка в окне приложения

> Почему код работает в этом виде?
Потому что кнопка создаётся до вызова метода self.show()

> Мы можем разнести разные элеметны окна в разные функции, как это сделано в первом варианте?
Зачем вам такое делать?



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#4 Июнь 29, 2015 16:30:39

kukuruku11
Зарегистрирован: 2015-06-18
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4. Не отображается кнопка в окне приложения

Rodegast
Зачем вам такое делать?
Мне кажется логичным и красивым создание элементов окна разными блоками кода. Хотя я только начинаю.
Для себя представляю создание оконной формы так:
1. Создание главного окна
2. Обвес из кнопок, надписей и т.п. за счет встроенных модулей и самописных функций
Вот код немного исправленный и рабочий ниже, сначала в конструкторе задаю основную геометрию окна, заголовок и статус, потом самописными функциями указываю позицию на мониторе и прикручиваю кнопку закрытия. Но, как понимаю, весь код можно написать в конструкторе.

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui, QtCore
# create new class main window
class WindowApp(QtGui.QMainWindow):
    def __init__(self):
        super(WindowApp, self).__init__()
        self.setGeometry(300, 300, 600,900)
        self.window_base()
        self.setWindowTitle('test_gui')
        self.statusBar().showMessage('Ready')
        
# window application
    def window_base(self):
        self.window_position()
        self.window_close_button()
        self.show()
        
# window position
    def window_position(self):
        qr = self.frameGeometry()
        center_pos = QtGui.QDesktopWidget().availableGeometry().center()
        qr.moveCenter(center_pos)
        self.move(qr.topLeft())
        
# window close button
    def window_close_button(self):
        quit_button = QtGui.QPushButton('Close', self)
        quit_button.clicked.connect(QtCore.QCoreApplication.instance().quit)
        quit_button.resize(quit_button.sizeHint())
        quit_button.move(250,850)
# main
def main():
    app = QtGui.QApplication(sys.argv)
    main_window=WindowApp()
    sys.exit(app.exec_())
    
if __name__ == '__main__':
    main()

То есть код в втором варианте жизнеспособен и приемлим для чтения? Поделитесь, пожалуйста, своими критериями расположения блоков, методов и функций.


Отредактировано kukuruku11 (Июнь 29, 2015 16:48:20)

Офлайн

#5 Июнь 29, 2015 17:04:26

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

PyQt4. Не отображается кнопка в окне приложения

Откройте для себя менеджеры компоновки



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#6 Июнь 29, 2015 17:11:27

kukuruku11
Зарегистрирован: 2015-06-18
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4. Не отображается кнопка в окне приложения

PooH
Откройте для себя менеджеры компоновки
Спасибо, буду разбираться

Офлайн

#7 Июнь 29, 2015 18:02:01

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

PyQt4. Не отображается кнопка в окне приложения

> Обвес из кнопок, надписей и т.п. за счет встроенных модулей и самописных функций
Лучше забудь про эту глупость и открой для себя дизайнер.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#8 Июнь 29, 2015 19:38:32

kukuruku11
Зарегистрирован: 2015-06-18
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4. Не отображается кнопка в окне приложения

Rodegast
> Обвес из кнопок, надписей и т.п. за счет встроенных модулей и самописных функцийЛучше забудь про эту глупость и открой для себя дизайнер.
QtDesigner всмысле?
Да, я сначала руками попробую сам, чтобы суть понять. Потом мышкой буду

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version