如何将 Pyqt 小部件设置为新打开的项目?
How to set Pyqt widget focus on a new opened item?
我需要执行类似于 QMessageBox.question()
的操作。
编写了一个具有简单界面的应用程序,其中包含按钮、滑块和其他内容。当我更改滑块的位置并释放鼠标按钮时,我需要出现一个新的小部件,并让用户仅从这个新的小部件中选择选项。
据我所知,QMessageBox.question
允许用户 select Yes
、No
或 Cancel
选项。
当问题被调用时
QMessageBox.question(self, u'Notification', u'Save changes?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
以前在主要 window 上的焦点转到问题,用户必须 select 只能从问题对话框中得到一些东西。
我需要用自己的按钮打开另一个 class,但要保留冻结父应用程序的功能。
这是一个示例
class ResetFilter(QWidget):
def __init__(self):
super().__init__()
self.centerPoint = QDesktopWidget().availableGeometry().center()
self.width = 320
self.height = 50
self.initUI()
def initUI(self):
self.setWindowFlags(QtCore.Qt.Window | Qt.WindowStaysOnTopHint)
self.grid = QGridLayout(self)
self.setLayout(self.grid)
hbox_ques = QHBoxLayout()
self.grid.addLayout(hbox_ques, 0, 0)
self.yes = QPushButton(self)
self.yes.setGeometry(80, 20, 50, 50)
self.yes.setText(u'YES')
hbox_ques.addWidget(self.yes)
self.no = QPushButton(self)
self.no.setGeometry(140, 20, 50, 50)
self.no.setText(u'NO')
hbox_ques.addWidget(self.no)
self.tmnt = QPushButton(self)
self.tmnt.setGeometry(200, 20, 50, 50)
self.tmnt.setText(u'TERMINATE')
hbox_ques.addWidget(self.tmnt)
self.setGeometry(self.centerPoint.x() - self.width/2, self.centerPoint.y() - self.height/2, self.width, self.height)
self.show()
class Pio(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
centerPoint = QDesktopWidget().availableGeometry().center()
self.setWindowFlags(QtCore.Qt.Window | Qt.WindowStaysOnTopHint)
self.launch = False
self.grid = QGridLayout(self)
self.setLayout(self.grid)
hbox_lbl = QHBoxLayout()
self.grid.addLayout(hbox_lbl, 0, 0)
self.slider = QSlider(Qt.Horizontal)
self.slider.sliderReleased.connect(self.ids_change)
hbox_lbl.addWidget(self.slider)
self.move(centerPoint.x() - self.width()/2, centerPoint.y() - self.height()/2)
self.show()
def ids_change(self):
self.item_reset = ResetFilter()
self.item_reset.show()
self.item_reset.setFocusPolicy(Qt.StrongFocus)
mainWin = Pio()
mainWin.show()
如果我对你的问题的理解正确,你想在弹出窗口 window 打开时冻结主要 window。要实现这一点,您可以使 ResetFilter
成为 QDialog
的子类,并使其成为模态的,例如
class ResetFilter(QDialog):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setModal(True)
# rest as before
在 Pio.ids_change
中,您需要以 self
作为父项来启动 ResetFilter
,例如
def ids_change(self):
self.item_reset = ResetFilter(self)
我需要执行类似于 QMessageBox.question()
的操作。
编写了一个具有简单界面的应用程序,其中包含按钮、滑块和其他内容。当我更改滑块的位置并释放鼠标按钮时,我需要出现一个新的小部件,并让用户仅从这个新的小部件中选择选项。
据我所知,QMessageBox.question
允许用户 select Yes
、No
或 Cancel
选项。
当问题被调用时
QMessageBox.question(self, u'Notification', u'Save changes?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
以前在主要 window 上的焦点转到问题,用户必须 select 只能从问题对话框中得到一些东西。
我需要用自己的按钮打开另一个 class,但要保留冻结父应用程序的功能。
这是一个示例
class ResetFilter(QWidget):
def __init__(self):
super().__init__()
self.centerPoint = QDesktopWidget().availableGeometry().center()
self.width = 320
self.height = 50
self.initUI()
def initUI(self):
self.setWindowFlags(QtCore.Qt.Window | Qt.WindowStaysOnTopHint)
self.grid = QGridLayout(self)
self.setLayout(self.grid)
hbox_ques = QHBoxLayout()
self.grid.addLayout(hbox_ques, 0, 0)
self.yes = QPushButton(self)
self.yes.setGeometry(80, 20, 50, 50)
self.yes.setText(u'YES')
hbox_ques.addWidget(self.yes)
self.no = QPushButton(self)
self.no.setGeometry(140, 20, 50, 50)
self.no.setText(u'NO')
hbox_ques.addWidget(self.no)
self.tmnt = QPushButton(self)
self.tmnt.setGeometry(200, 20, 50, 50)
self.tmnt.setText(u'TERMINATE')
hbox_ques.addWidget(self.tmnt)
self.setGeometry(self.centerPoint.x() - self.width/2, self.centerPoint.y() - self.height/2, self.width, self.height)
self.show()
class Pio(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
centerPoint = QDesktopWidget().availableGeometry().center()
self.setWindowFlags(QtCore.Qt.Window | Qt.WindowStaysOnTopHint)
self.launch = False
self.grid = QGridLayout(self)
self.setLayout(self.grid)
hbox_lbl = QHBoxLayout()
self.grid.addLayout(hbox_lbl, 0, 0)
self.slider = QSlider(Qt.Horizontal)
self.slider.sliderReleased.connect(self.ids_change)
hbox_lbl.addWidget(self.slider)
self.move(centerPoint.x() - self.width()/2, centerPoint.y() - self.height()/2)
self.show()
def ids_change(self):
self.item_reset = ResetFilter()
self.item_reset.show()
self.item_reset.setFocusPolicy(Qt.StrongFocus)
mainWin = Pio()
mainWin.show()
如果我对你的问题的理解正确,你想在弹出窗口 window 打开时冻结主要 window。要实现这一点,您可以使 ResetFilter
成为 QDialog
的子类,并使其成为模态的,例如
class ResetFilter(QDialog):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setModal(True)
# rest as before
在 Pio.ids_change
中,您需要以 self
作为父项来启动 ResetFilter
,例如
def ids_change(self):
self.item_reset = ResetFilter(self)