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...