PyQt QWidget設定模態對話方塊

2021-10-04 20:57:00 字數 2146 閱讀 9067

pyqt qwidget設定模態對話方塊

import sys

from pyqt5.qtcore import *

from pyqt5.qtgui import *

from pyqt5.qtwidgets import *

class dialogdemo

( qmainwindow )

: def __init__

(self, parent=none)

:super

(dialogdemo, self)

.__init__

(parent)

self.

setwindowtitle

("dialog 例子"

) self.

resize

(350

,300

)

self.btn =

qpushbutton

( self)

self.btn.

settext

("彈出對話方塊"

) self.btn.

move(50

,50) self.btn.clicked.

connect

(self.showdialog)

def showdialog

(self )

: dialog =

qdialog()

btn =

qpushbutton

("ok"

, dialog )

btn.

move(50

,50) dialog.

setwindowtitle

("dialog"

) dialog.

setwindowmodality

dialog.

exec_()

if __name__ ==

'__main__'

:(sys.ar**)

demo =

dialogdemo()

demo.

show()

sys.

exit

exec_()

)

參考1

詳細**如下:

wgt_tmp=

qwidget()

wgt_tmp.

setwindowmodality

wgt_tmp.

setminimumwidth

(700

) wgt_tmp.

setminimumsize

(qsize

(700

,700))

wgt_tmp.

setstylesheet

("background-color: red;"

) wgt_tmp.

show

()

但是奇怪的是,視窗一閃而過,並沒有模態停下,百思不得其解,終於在第二天洗臉的時候,靈機一動,突然想明白了,wgt_tmp是個臨時變數,方法執行後,wgt_tmp被銷毀了,所以顯示的是一閃而過,詳細請看我的另一篇文章,會有詳細說明,將wgt_tmp變成self.wgt_tmp後成功模態顯示視窗。這個地方需要注意的一點是,如果是qdialog(),通過exec_進行的,會阻塞程式的,但是通過wgt_tmp.show()不會阻塞程式,所以才會被銷毀,但是也確實實現了模態對話方塊(這個地方有點類似多執行緒,是不是多執行緒,筆者未進行論證)。

參考**:

wgt_tmp=

qdialog()

wgt_tmp.

setwindowmodality

wgt_tmp.

setminimumwidth

(700

) wgt_tmp.

setminimumsize

(qsize

(700

,700))

wgt_tmp.

setstylesheet

("background-color: red;"

) wgt_tmp.

exec_

()

關於Qt模態視窗的設定

模態視窗會阻止其他視窗的輸入型事件 如獲取焦點 但是模態視窗的子視窗不會被限制。設定 setattribute qt wa showmodal,true 的方式qt4.5已廢棄,略過 目前,qt中設定視窗模態是通過 qwidget 的setwindowmodality 函式 引數有三種列舉 注意,q...

VS2017 Qt設定模態 非模態對話方塊

1.重新新增乙個類mydialog,ui作為新的對話方塊 右鍵專案 新增 add qt class qt widget class 2.新增的類是繼承於qwidget,修改mydialog.h和mydialog.cpp。mydialog.h include ui mydialog.h include...

模態 非模態

正常視窗似乎是window.open或hreftarget彈出的普通視窗,而模式視窗是類似alert那種必須關閉才能響應其他事件的視窗,或者是可以繼承父視窗的生存 父視窗關閉相應的模式視窗也關閉 以下就是2個,乙個必須響應,乙個不許要 showmodaldialog ie 4 支援 showmode...