You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5点击按钮后弹出窗口瞬间关闭问题求助

PyQt5点击按钮后弹出窗口瞬间关闭问题求助

我遇到了一个问题:点击“Create”按钮后,弹出的窗口只显示了一毫秒就立刻关闭了。

我的代码如下:

main.py文件:

from PyQt5.QtCore import Qt
import PyQt5.QtWidgets as qt
import database as db # 褎邪泄谢, 褋芯械写械薪褟褞褖懈泄 袘袛 褋 锌褉懈谢芯卸械薪懈械屑
import create_client_fn

app = qt.QApplication([])
window = qt.QWidget()

# 袧袗效袗袥袨 肖袪袨袧孝协袧袛袗

window.setWindowTitle("袟邪锌懈褋褜 泻谢懈械薪褌芯胁 by EevVee's Projects")
window.resize(650, 610)

main_layout = qt.QHBoxLayout()

clients_list_layout = qt.QVBoxLayout() # 胁 褋芯褋褌邪胁械 屑褝泄薪
spisok_nadpis = qt.QLabel("小锌懈褋芯泻 泻谢懈械薪褌芯胁:")
clients_list = qt.QListWidget()
clients_list_layout.addWidget(spisok_nadpis)
clients_list_layout.addWidget(clients_list)

but_style = "background-color: rgb(173, 99, 219);"

find_clients_layout = qt.QVBoxLayout() # 胁 褋芯褋褌邪胁械 屑褝泄薪
create_and_search_layout = qt.QHBoxLayout() # 胁 褋芯褋褌邪胁械 褎邪泄薪写
create_btn = qt.QPushButton("小芯蟹写邪褌褜")
create_btn.setStyleSheet(but_style)
create_and_search_layout.addWidget(create_btn)
search_field = qt.QLineEdit()
search_field.setPlaceholderText("袥褞斜邪褟 懈薪褎芯 芯 泻谢懈械薪褌械")
create_and_search_layout.addWidget(search_field)
search_btn = qt.QPushButton("袧邪泄褌懈")
search_btn.setStyleSheet(but_style)
create_and_search_layout.addWidget(search_btn)
find_clients_layout.addLayout(create_and_search_layout)
list_of_found_clients_layout = qt.QVBoxLayout() # 胁 褋芯褋褌邪胁械 褎邪泄薪写
list_of_found_clients = qt.QListWidget()
list_of_found_clients_layout.addWidget(list_of_found_clients)
find_clients_layout.addLayout(list_of_found_clients_layout)

menu_of_app = qt.QVBoxLayout() # 胁 褋芯褋褌邪胁械 屑械泄薪 # 褋芯蟹写邪械褌 谢褝泄邪褍褌 写谢褟 泻薪芯锌芯泻 褋 写芯锌 褉邪蟹写械谢邪屑懈.
notes_sv_btn = qt.QPushButton("袟邪屑械褌泻懈\n褋褍锌械褉胁懈蟹懈泄") # 蟹邪屑械褌泻懈 褋褍锌械褉胁懈蟹懈泄
sess_descrs_btn = qt.QPushButton("袨锌懈褋邪薪懈褟\n褋械褋褋懈泄") # 芯锌懈褋邪薪懈褟 褋械褋褋懈泄
shedule_btn = qt.QPushButton("袪邪褋锌懈褋邪薪懈械") # 褉邪褋锌懈褋邪薪懈械 褋械褋褋懈泄
notes_sv_btn.setStyleSheet(but_style)
sess_descrs_btn.setStyleSheet(but_style)
shedule_btn.setStyleSheet(but_style)
menu_of_app.addWidget(notes_sv_btn)
menu_of_app.addWidget(sess_descrs_btn)
menu_of_app.addWidget(shedule_btn)

main_layout.addLayout(clients_list_layout)
main_layout.addLayout(find_clients_layout)
main_layout.addLayout(menu_of_app)

# 袣袨袧袝笑 肖袪袨袧孝协袧袛袗

create_btn.clicked.connect(create_client_fn.main)

window.setLayout(main_layout)
window.show()
app.exec_()

# 2024 EevVee's Projects 漏

create_client_fn.py文件:

from PyQt5.QtCore import Qt
import PyQt5.QtWidgets as qt
import database as db
def main():
    window = qt.QWidget()
    window.setWindowTitle("小芯蟹写邪褌褜 泻谢懈械薪褌邪")

    # 褋芯蟹写邪械屑 芯褋薪芯胁薪芯泄 谢褝泄邪褍褌
    main_layout = qt.QVBoxLayout()

    # 褋芯蟹写邪械屑 写芯锌芯谢薪懈褌械谢褜薪褘械 谢褝泄邪褍褌褘 写谢褟 胁胁芯写邪 写邪薪薪褘褏 泻谢懈械薪褌芯胁(胁褋械 锌褉械薪邪写谢械卸邪褌 main_layout)
    l_name_field_layout = qt.QHBoxLayout()
    f_name_field_layout = qt.QHBoxLayout()
    fa_name_field_layout = qt.QHBoxLayout()
    age_field_layout = qt.QHBoxLayout()
    dateofrequest_field_layout = qt.QHBoxLayout()
    relations_field_layout = qt.QHBoxLayout()
    children_field_layout = qt.QHBoxLayout()
    job_field_layout = qt.QHBoxLayout()
    hobby_field_layout = qt.QHBoxLayout()
    request_field_layout = qt.QHBoxLayout()
    ust_kontr_field_layout = qt.QHBoxLayout()
    save_button_layout = qt.QHBoxLayout()

    # 褋芯蟹写邪械屑 锌芯谢褟 写谢褟 懈薪褎芯褉屑邪褑懈懈 懈 泻薪芯锌泻褍 写谢褟 褋芯蟹写邪薪懈褟 蟹邪锌懈褋懈
    l_name_field = qt.QLineEdit()
    f_name_field = qt.QLineEdit()
    fa_name_field = qt.QLineEdit()
    age_field = qt.QLineEdit()
    dateofrequest_field = qt.QLineEdit()
    relations_field = qt.QTextEdit()
    children_field = qt.QTextEdit()
    job_field = qt.QTextEdit()
    hobby_field = qt.QTextEdit()
    request_field = qt.QTextEdit()
    ust_kontr_field = qt.QTextEdit()
    save_button = qt.QPushButton("小芯蟹写邪褌褜")

    # 褋芯蟹写邪械屑 锌芯写锌懈褋懈 泻 锌芯谢褟屑
    l_name_label = qt.QLabel("肖邪屑懈谢懈褟")
    f_name_label = qt.QLabel("袠屑褟")
    fa_name_label = qt.QLabel("袨褌褔械褋褌胁芯")
    age_label = qt.QLabel("袙芯蟹褉邪褋褌")
    dateofrequest_label = qt.QLabel("袛邪褌邪 芯斜褉邪褖械薪懈褟")
    relations_label = qt.QLabel("袨褌薪芯褕械薪懈褟")
    children_label = qt.QLabel("袛械褌懈")
    job_label = qt.QLabel("袪邪斜芯褌邪")
    hobby_label = qt.QLabel("啸芯斜斜懈/褍胁谢械褔械薪懈褟")
    request_label = qt.QLabel("袟邪锌褉芯褋")
    ust_kontr_label = qt.QLabel("校褋褌薪褘泄 泻芯薪褌褉邪泻褌")

    # 写芯斜邪胁谢褟械屑 锌芯写锌懈褋懈 泻 褋芯芯褌胁械褌褋褌胁褍褞褖懈屑 胁褌芯褉芯褋褌械锌械薪薪褘屑 谢褝泄邪褍褌邪屑
    l_name_field_layout.addWidget(l_name_label)
    f_name_field_layout.addWidget(f_name_label)
    fa_name_field_layout.addWidget(fa_name_label)
    age_field_layout.addWidget(age_label)
    dateofrequest_field_layout.addWidget(dateofrequest_label)
    relations_field_layout.addWidget(relations_label)
    children_field_layout.addWidget(children_label)
    job_field_layout.addWidget(job_label)
    hobby_field_layout.addWidget(hobby_label)
    request_field_layout.addWidget(request_label)
    ust_kontr_field_layout.addWidget(ust_kontr_label)

    # 写芯斜邪胁谢褟械屑 锌芯谢褟 懈 泻薪芯锌泻褍 泻 褋芯芯褌胁械褌褋褌胁褍褞褖懈屑 胁褌芯褉芯褋褌械锌械薪薪褘屑 谢褝泄邪褍褌邪屑
    l_name_field_layout.addWidget(l_name_field)
    f_name_field_layout.addWidget(f_name_field)
    fa_name_field_layout.addWidget(fa_name_field)
    age_field_layout.addWidget(age_field)
    dateofrequest_field_layout.addWidget(dateofrequest_field)
    relations_field_layout.addWidget(relations_field)
    children_field_layout.addWidget(children_field)
    job_field_layout.addWidget(job_field)
    hobby_field_layout.addWidget(hobby_field)
    request_field_layout.addWidget(request_field)
    ust_kontr_field_layout.addWidget(ust_kontr_field)
    save_button_layout.addWidget(save_button)

    # 写芯斜邪胁谢褟械屑 胁褌芯褉芯褋褌械锌械薪薪褘械 谢褝泄邪褍褌褘 泻 芯褋薪芯胁薪芯屑褍
    main_layout.addLayout(l_name_field_layout)
    main_layout.addLayout(f_name_field_layout)
    main_layout.addLayout(fa_name_field_layout)
    main_layout.addLayout(age_field_layout)
    main_layout.addLayout(dateofrequest_field_layout)
    main_layout.addLayout(relations_field_layout)
    main_layout.addLayout(children_field_layout)
    main_layout.addLayout(job_field_layout)
    main_layout.addLayout(hobby_field_layout)
    main_layout.addLayout(request_field_layout)
    main_layout.addLayout(ust_kontr_field_layout)
    main_layout.addLayout(save_button_layout)

    # 薪邪 褝褌芯屑 褎褉芯薪褌褝薪写 蟹邪胁械褉褕械薪

    # 褍褋褌邪薪邪胁谢懈胁邪械屑 谢褝泄邪褍褌 写谢褟 芯泻薪邪
    window.setLayout(main_layout)

    # 芯褌芯斜褉邪卸邪械屑 芯泻薪芯
    window.show()

我启动应用后,点击“小芯蟹写邪褌褜”按钮,窗口闪了一下就没了,求帮忙解决!


问题分析与解决办法

这问题我太熟了!核心原因是你在create_client_fn.py的main()函数里创建的window是局部变量——当main()函数执行完最后一行代码,Python的垃圾回收机制就会把这个局部变量销毁,绑定在它上面的窗口自然就跟着关闭了。

给你两种解决思路,第二种更推荐:

方法1:给窗口对象添加持久引用(简单快速)

修改create_client_fn.py的main()函数,把window变成全局变量,这样函数执行完它也不会被回收:

from PyQt5.QtCore import Qt
import PyQt5.QtWidgets as qt
import database as db

def main():
    # 声明window为全局变量
    global window
    window = qt.QWidget()
    window.setWindowTitle("小芯蟹写邪褌褜 泻谢懈械薪褌邪")
    # 后面的UI代码保持不变...

方法2:用类实现弹窗(PyQt标准写法,推荐)

这种方式更符合PyQt的面向对象设计,后续加功能(比如保存逻辑、数据校验)也更方便:

首先重构create_client_fn.py:

from PyQt5.QtCore import Qt
import PyQt5.QtWidgets as qt
import database as db

class CreateClientWindow(qt.QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("小芯蟹写邪褌褜 泻谢懈械薪褌邪")
        self.init_ui()

    def init_ui(self):
        # 把原来main()里的UI代码全部移到这里
        main_layout = qt.QVBoxLayout()

        l_name_field_layout = qt.QHBoxLayout()
        f_name_field_layout = qt.QHBoxLayout()
        fa_name_field_layout = qt.QHBoxLayout()
        age_field_layout = qt.QHBoxLayout()
        dateofrequest_field_layout = qt.QHBoxLayout()
        relations_field_layout = qt.QHBoxLayout()
        children_field_layout = qt.QHBoxLayout()
        job_field_layout = qt.QHBoxLayout()
        hobby_field_layout = qt.QHBoxLayout()
        request_field_layout = qt.QHBoxLayout()
        ust_kontr_field_layout = qt.QHBoxLayout()
        save_button_layout = qt.QHBoxLayout()

        l_name_field = qt.QLineEdit()
        f_name_field = qt.QLineEdit()
        fa_name_field = qt.QLineEdit()
        age_field = qt.QLineEdit()
        dateofrequest_field = qt.QLineEdit()
        relations_field = qt.QTextEdit()
        children_field = qt.QTextEdit()
        job_field = qt.QTextEdit()
        hobby_field = qt.QTextEdit()
        request_field = qt.QTextEdit()
        ust_kontr_field = qt.QTextEdit()
        save_button = qt.QPushButton("小芯蟹写邪褌褜")

        l_name_label = qt.QLabel("肖邪屑懈谢懈褟")
        f_name_label = qt.QLabel("袠屑褟")
        fa_name_label = qt.QLabel("袨褌褔械褋褌胁芯")
        age_label = qt.QLabel("袙芯蟹褉邪褋褌")
        dateofrequest_label = qt.QLabel("袛邪褌邪 芯斜褉邪褖械薪懈褟")
        relations_label = qt.QLabel("袨褌薪芯褕械薪懈褟")
        children_label = qt.QLabel("袛械褌懈")
        job_label = qt.QLabel("袪邪斜芯褌邪")
        hobby_label = qt.QLabel("啸芯斜斜懈/褍胁谢械褔械薪懈褟")
        request_label = qt.QLabel("袟邪锌褉芯褋")
        ust_kontr_label = qt.QLabel("校褋褌薪褘泄 泻芯薪褌褉邪泻褌")

        l_name_field_layout.addWidget(l_name_label)
        f_name_field_layout.addWidget(f_name_label)
        fa_name_field_layout.addWidget(fa_name_label)
        age_field_layout.addWidget(age_label)
        dateofrequest_field_layout.addWidget(dateofrequest_label)
        relations_field_layout.addWidget(relations_label)
        children_field_layout.addWidget(children_label)
        job_field_layout.addWidget(job_label)
        hobby_field_layout.addWidget(hobby_label)
        request_field_layout.addWidget(request_label)
        ust_kontr_field_layout.addWidget(ust_kontr_label)

        l_name_field_layout.addWidget(l_name_field)
        f_name_field_layout.addWidget(f_name_field)
        fa_name_field_layout.addWidget(fa_name_field)
        age_field_layout.addWidget(age_field)
        dateofrequest_field_layout.addWidget(dateofrequest_field)
        relations_field_layout.addWidget(relations_field)
        children_field_layout.addWidget(children_field)
        job_field_layout.addWidget(job_field)
        hobby_field_layout.addWidget(hobby_field)
        request_field_layout.addWidget(request_field)
        ust_kontr_field_layout.addWidget(ust_kontr_field)
        save_button_layout.addWidget(save_button)

        main_layout.addLayout(l_name_field_layout)
        main_layout.addLayout(f_name_field_layout)
        main_layout.addLayout(fa_name_field_layout)
        main_layout.addLayout(age_field_layout)
        main_layout.addLayout(dateofrequest_field_layout)
        main_layout.addLayout(relations_field_layout)
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 17:10:27