我明白你的需求了。我们可以定义一个装饰器函数 `set_input_dialog_position()`,使用这个装饰器函数修饰 `QInputDialog.getText` 方法,使其在调用时自动设置位置。下面是修改后的示例代码:
from PySide6.QtWidgets import QApplication, QMainWindow, QInputDialog
from PySide6.QtCore import Qt
def set_input_dialog_position(x, y):
def decorator(func):
def wrapper(*args, **kwargs):
input_dialog = func(*args, **kwargs)
input_dialog.move(x, y)
return input_dialog
return wrapper
return decorator
app = QApplication()
main_window = QMainWindow()
main_window.resize(400, 300)
@set_input_dialog_position(100, 100)
def customized_getText(*args, **kwargs):
return QInputDialog.getText(*args, **kwargs)
def show_input_dialog():
rule, ok = customized_getText(main_window, '规则录入', '请录入规则。回车持续录入,录N退出:')
if ok and rule.upper() != 'N':
# 处理输入规则
print("输入规则:", rule)
# 关闭QInputDialog后恢复主窗口焦点
main_window.activateWindow()
# 捕获主窗口焦点事件
def event_filter(obj, event):
if event.type() == Qt.FocusInEvent:
if isinstance(obj, QMainWindow):
# 主窗口获取焦点时显示QInputDialog并设置位置
show_input_dialog()
return False
main_window.installEventFilter(event_filter)
main_window.show()
# 设置初始焦点到主窗口上
main_window.activateWindow()
main_window.setFocus()
app.exec()
以上代码中,我们定义了装饰器函数 `set_input_dialog_position()`,它接收坐标参数,并返回一个装饰器。这个装饰器会自动将修饰的函数返回的 `QInputDialog` 对象设置到指定位置。我们用 `@set_input_dialog_position(100, 100)` 将 `customized_getText` 函数修饰了起来,从而实现了在调用时自动设置位置。
希望这次的答案能满足你的需求!如果有任何其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |