import tkinter as tk import tkinter.simpledialog as sd class MyDialog(sd.SimpleDialog): def __init__(self, parent, x, y): super().__init__(parent, title="My Dialog") self.x = x self.y = y def show(self, *args): super().show(*args) self.geometry("+{}+{}".format(self.x, self.y)) root = tk.Tk() # 创建 SimpleDialog 对象,并指定位置参数 MyDialog(root, 300, 200) root.mainloop()
时间: 2024-04-21 08:29:44 浏览: 6
这是一个使用tkinter库实现的简单对话框程序。程序中定义了一个继承自SimpleDialog类的MyDialog类,用于创建一个自定义的对话框。在MyDialog类的构造函数中,我们通过调用父类构造函数的方式来初始化对话框的属性。而在show()方法中,我们通过设置对话框的geometry属性来指定对话框的位置。
在主程序中,我们创建了一个Tk对象,并将其作为参数传递给MyDialog类,创建一个自定义的对话框。最后,我们通过调用Tk对象的mainloop()方法来启动程序的事件循环,使程序进入等待事件的状态,等待用户操作。
需要注意的是,这段代码在Python解释器中执行时,需要将每一行代码缩进4个空格,否则会报错。
相关问题
代码报错, __init__() got an unexpected keyword argument 'width'
如果在使用 `SimpleDialog` 的子类时出现了 `__init__() got an unexpected keyword argument 'width'` 的错误,可能是因为 `SimpleDialog` 类并没有提供 `width` 和 `height` 参数。
如果需要设置对话框的大小,可以使用 `dialog_body` 属性来自定义对话框的内容区域。具体来说,可以将一个 `Frame` 对象作为 `dialog_body` 的子组件,并设置该 `Frame` 的大小和布局来实现对话框的自定义大小。
以下是一个示例代码,可以创建一个大小为 300x200 的 `SimpleDialog`:
```python
import tkinter as tk
import tkinter.simpledialog as sd
class MyDialog(sd.SimpleDialog):
def __init__(self, parent):
self.dlg_width, self.dlg_height = 300, 200
body = tk.Frame(self, width=self.dlg_width, height=self.dlg_height)
body.pack_propagate(0)
body.pack()
super().__init__(parent, title="My Dialog", master=parent, dialog_body=body)
root = tk.Tk()
# 创建 SimpleDialog 对象
MyDialog(root)
root.mainloop()
```
以上示例代码中,`MyDialog` 是继承自 `SimpleDialog` 的自定义对话框类,通过创建一个大小为 300x200 的 `Frame` 对象,并将其作为 `dialog_body` 的子组件,来实现对话框的自定义大小。同时,通过 `pack_propagate(0)` 方法来禁止 `Frame` 对象自动调整大小,从而保证对话框的大小不会改变。
tk 的simpledialog使用时如何在当前鼠标位置弹出?
在 Tkinter 中,可以使用 `tkinter.simpledialog` 模块中的 `SimpleDialog` 类来实现简单对话框的功能,但是该类并没有提供直接在当前鼠标位置弹出对话框的方法。
不过,我们可以通过以下步骤来实现在当前鼠标位置弹出 `SimpleDialog`:
1. 获取当前鼠标位置。可以使用 `tkinter` 的 `winfo_pointerxy` 方法获取当前鼠标位置的 X 和 Y 坐标。
2. 计算对话框的位置。可以根据当前鼠标位置、对话框的大小以及屏幕的大小来计算对话框的位置。
3. 创建 `SimpleDialog` 对象,并设置其位置。可以使用 `SimpleDialog` 的 `geometry` 方法设置对话框的位置,具体来说,可以将计算出的对话框位置作为参数传递给 `geometry` 方法。
下面是一个示例代码,可以在当前鼠标位置弹出一个大小为 300x200 的 `SimpleDialog`:
```python
import tkinter as tk
import tkinter.simpledialog as sd
class MyDialog(sd.SimpleDialog):
def __init__(self, parent):
super().__init__(parent, title="My Dialog", width=300, height=200)
root = tk.Tk()
# 获取当前鼠标位置
x, y = root.winfo_pointerxy()
# 计算对话框位置
width, height = 300, 200
screen_width, screen_height = root.winfo_screenwidth(), root.winfo_screenheight()
x = max(0, min(x, screen_width - width))
y = max(0, min(y, screen_height - height))
# 创建 SimpleDialog 对象,并设置位置
MyDialog(root).geometry(f"+{x}+{y}")
root.mainloop()
```
以上示例代码中,`MyDialog` 是继承自 `SimpleDialog` 的自定义对话框类,通过计算鼠标位置和屏幕大小来确定对话框的位置,并将位置作为参数传递给 `geometry` 方法来设置对话框的位置。