gpt4 book ai didi

python - 如何将 Pyqt 小部件焦点设置在新打开的项目上?

转载 作者:行者123 更新时间:2023-12-01 07:52:47 26 4
gpt4 key购买 nike

我需要执行类似于 QMessageBox.question() 的操作。编写了一个具有简单界面的应用程序,其中包含按钮、 slider 和其他内容。当我更改 slider 的位置并释放鼠标按钮时,我需要出现一个新的小部件,并让用户仅从这个新的小部件中选择选项。据我所知,QMessageBox.question 允许用户选择取消 选项。

当问题被调用时

QMessageBox.question(self, u'通知', u'保存更改?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)

以前的焦点位于主窗口上,现在转到问题,用户必须仅从问题对话框中选择某些内容。

我需要使用自己的按钮打开另一个类,但保留卡住父应用程序的功能。

这是一个示例

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()

最佳答案

如果我正确理解你的问题,你想在弹出窗口打开时卡住主窗口。为了实现这一点,您可以使 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)

关于python - 如何将 Pyqt 小部件焦点设置在新打开的项目上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56112837/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com