Найти - Пользователи
Полная версия: PyQt4. Не отображается кнопка в окне приложения
Начало » Python для новичков » PyQt4. Не отображается кнопка в окне приложения
1
kukuruku11
Доброго времени суток! Начал освоение 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
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()

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

> Мы можем разнести разные элеметны окна в разные функции, как это сделано в первом варианте?
Зачем вам такое делать?
kukuruku11
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()

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


PooH
Откройте для себя менеджеры компоновки
kukuruku11
PooH
Откройте для себя менеджеры компоновки
Спасибо, буду разбираться
Rodegast
> Обвес из кнопок, надписей и т.п. за счет встроенных модулей и самописных функций
Лучше забудь про эту глупость и открой для себя дизайнер.
kukuruku11
Rodegast
> Обвес из кнопок, надписей и т.п. за счет встроенных модулей и самописных функцийЛучше забудь про эту глупость и открой для себя дизайнер.
QtDesigner всмысле?
Да, я сначала руками попробую сам, чтобы суть понять. Потом мышкой буду
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB