第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

PyQt5 應(yīng)用程序中的故障排除(QDialog -> QMainWindow)

PyQt5 應(yīng)用程序中的故障排除(QDialog -> QMainWindow)

青春有我 2023-02-22 13:52:42
我目前正在嘗試解決我在使用 Python 開發(fā)的 Qt 應(yīng)用程序時(shí)遇到的問(wèn)題。我只有一個(gè)簡(jiǎn)單的主窗口和一個(gè)模態(tài) QDialog 設(shè)置,用于在主窗口上觸發(fā)菜單操作后收集用戶輸入。QDialog 的行為符合預(yù)期,因?yàn)槲乙呀?jīng)能夠確認(rèn)測(cè)試打印是在 QDialog 返回 Accepted 時(shí)執(zhí)行的,但是應(yīng)用程序?qū)⒃?print 語(yǔ)句之后完全崩潰,沒(méi)有錯(cuò)誤消息。當(dāng) QDialog 返回 Rejected 時(shí)會(huì)發(fā)生相同的行為。澄清一下,主窗口顯示了幾秒鐘,應(yīng)用程序崩潰了,沒(méi)有錯(cuò)誤消息。我希望該函數(shù)在收到來(lái)自下面的 Process 函數(shù)的任一結(jié)果后,將焦點(diǎn)返回到主窗口(它仍然打開以進(jìn)行操作)。我還嘗試使 QDialog 成為無(wú)模式的(使用 show),并且 QDialog 的接受/拒絕函數(shù)似乎按預(yù)期返回到主窗口,但是再次調(diào)用調(diào)出 QDialog 的函數(shù)會(huì)使應(yīng)用程序崩潰。我在這個(gè)項(xiàng)目中使用 pyqt 5.9,但我在 pyqt 5.6 的許多其他項(xiàng)目中使用了與下面代碼基本相同的設(shè)置,但沒(méi)有發(fā)生這種情況。我試圖弄清楚 pyqt 5.9 是否存在任何可能導(dǎo)致此問(wèn)題的已知問(wèn)題,或者我的代碼中是否存在導(dǎo)致此崩潰發(fā)生的錯(cuò)誤。我正在考慮回滾到 5.6 看看是否可以解決這個(gè)問(wèn)題,但我覺(jué)得可能是我誤解了導(dǎo)致這種情況發(fā)生的原因。我在 Windows 10 上通過(guò) Anaconda 提示符(Anaconda 4.8.3、Python 3.7)運(yùn)行代碼,因?yàn)?Qt 應(yīng)用程序在 Spyder 中重復(fù)運(yùn)行時(shí)仍然存在問(wèn)題。我正在使用 Anaconda 附帶的 pyqt,并且沒(méi)有對(duì) pyqt 進(jìn)行任何額外的 pip 安裝。主窗口代碼import sysfrom PyQt5.QtCore import Qtfrom PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QGridLayout, QHBoxLayout, QVBoxLayout, QAction, QLabelfrom PyQt5.QtWidgets import QDialog, QListWidget, QListWidgetItem, QAbstractItemView, QPushButton, QLineEdit, QSpacerItem, QSizePolicyclass FirstWindow(QMainWindow):    def __init__(self):        QMainWindow.__init__(self)                self.title = 'Window 1'        self.left = 350        self.top = 150        self.width = 800        self.height = 500                self.setWindowTitle(self.title)        self.setGeometry(self.left,self.top,self.width,self.height)                widget = QWidget()        self.setCentralWidget(widget)        grid = QGridLayout()        widget.setLayout(grid)                mainMenu = self.menuBar()        mainMenu.setNativeMenuBar(False)        subMenu = mainMenu.addMenu('File')                modifyDB = QAction('Test',self)        subMenu.addAction(modifyDB)        modifyDB.triggered.connect(self.Process)                self.statusBar().showMessage('Ready')    def Process(self):        dialog = DialogWin()        if dialog.exec_() == QDialog.Accepted:            print('test passed')
查看完整描述

1 回答

?
慕沐林林

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個(gè)贊

解釋:

問(wèn)題是您使用了同一個(gè) QSpacerItem 2 次,當(dāng) QDialog 關(guān)閉時(shí),因?yàn)樗且粋€(gè)局部變量,它將被刪除,Qt 也會(huì)消除內(nèi)部對(duì)象,在這種情況下,QSpacerItem 將被雙重消除導(dǎo)致“分段錯(cuò)誤”。


解決方案:

您必須創(chuàng)建 2 個(gè) QSpacerItem:


# ...

hbox = QHBoxLayout()

hbox.addItem(spacer)

self.option_exp = QLabel('OR')

hbox.addWidget(self.option_exp)

hbox.addItem(QSpacerItem(10,10,QSizePolicy.Expanding,QSizePolicy.Expanding))

vbox.addLayout(hbox)

# ...

另一種選擇是不使用 QSpacerItem 而是設(shè)置一個(gè)拉伸因子:


# ...

hbox = QHBoxLayout()

hbox.addStretch()

self.option_exp = QLabel('OR')

hbox.addWidget(self.option_exp)

hbox.addStretch()

vbox.addLayout(hbox)

# ...

或者不使用 QHBoxLayout 并通過(guò)設(shè)置對(duì)齊方式將 QLabel 直接設(shè)置為 QVBoxLayout:


# ...

self.table_list = QListWidget()

self.table_list.setSelectionMode(QAbstractItemView.SingleSelection)

vbox.addWidget(self.table_list)


self.option_exp = QLabel('OR')

vbox.addWidget(self.option_exp, alignment=Qt.AlignHCenter)

   

self.new_name = QLineEdit(placeholderText='Enter New Source Name')       

vbox.addWidget(self.new_name)

# ...


查看完整回答
反對(duì) 回復(fù) 2023-02-22
  • 1 回答
  • 0 關(guān)注
  • 297 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)