有一个程序,通过按下按钮,可以创建相应类的窗口。窗口是列表项。
有必要确保每个窗口都有自己的分配id,并且根据id输入的QLineEdit内容,可以向窗口发送包含特定值和命令的变量,例如关闭窗口,使其处于非活动状态或反之亦然活跃,或改变其颜色。
一般如何创建和使用子窗口?
告诉我在哪里可以找到好的课程,教科书,因为 Gosha Dudar 很难!在delphi中一切都简单得多。为什么 Python 是轻量级的?它非常沉重:-(我的代码有多文盲?
整个程序代码:
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys
child_count = 0
child_window = []
class main_window_class(QMainWindow):
def __init__(self):
super(main_window_class, self).__init__()
self.setWindowTitle("Prog_1 Main Window")
self.setGeometry(100, 100, 500, 500)
self.btn1 = QtWidgets.QPushButton("Создать дочернее окно", self)
self.btn1.clicked.connect(self.btn1_on_click)
self.btn1.setGeometry(0,50,300,50)
self.name_edit = QtWidgets.QLineEdit("Ваш ник",self)
self.name_edit.setGeometry(0, 0, 300, 50)
def print_close_message(self):
print("кто-то сдох :-(")
def btn1_on_click(self):
global child_count, child_window
child_window.append(child_window_class())
child_window[child_count].show()
print(len(child_window))
child_count += 1
print("нас стало:",child_count)
id = child_window.index(child_window) #тут вываливается ошибка
print("мой id:",id)
class child_window_class(QMainWindow):
def __init__(self):
super(child_window_class, self).__init__()
self.setWindowTitle("Prog_1 Main Window")
self.setGeometry(100, 100, 500, 500)
def closeEvent(self, event):
global child_count
event.accept()
main_window_class().print_close_message()
child_count -= 1
print("нас осталось:",child_count)
def main_application_init():
app = QApplication(sys.argv)
main_window = main_window_class()
main_window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main_application_init()
该函数
index在列表中查找一个对象,如果它不存在,它将抛出一个异常ValueError,并且您将一个数字传递给该函数,尽管列表中有子窗口的对象。必须用try/捕获异常except。在示例中,我将展示如何处理未在try/中捕获的异常except,通过sys.excepthook至于代码,我会说它看起来不错。但是类名应该用大写和驼峰表示,我认为最好不要写在 name
class中,例如:MainWindow.child_count = 0, child_window = []我会将变量转移到类本身MainWindow。是的,而且child_count没有必要,因为。数量可以从列表中获取child_window这里,顺便说一句,废话:
您创建一个新窗口并调用它的
print_close_message. 在架构上,最好让子窗口通过父窗口并使用它。在print_close_message为子窗口对象添加了一个参数时,小部件将自己写入它,因此父窗口知道子窗口正在关闭考虑到评论和建议,更正了代码:
最好的教程是文档,但是您需要时间来学习如何阅读它。
您选择了一个
QMainWindow用于创建应用程序窗口的类——这是一个不错的选择。从阅读 Qt Main Window Framework开始。
您需要掌握的第二个主题是信号和插槽。
开始阅读信号和插槽
我们进一步阅读布局管理
Глобальные переменные - это ЗЛО.您的代码可能如下所示: