python创建子窗口_python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
时间: 2023-11-22 07:55:58 浏览: 337
以下是一个Python Tkinter GUI编程的例子,展示如何创建一个子窗口并在窗口上绘制图片。
```python
import tkinter as tk
from PIL import Image, ImageTk
# 创建主窗口
root = tk.Tk()
# 创建子窗口
child = tk.Toplevel(root)
# 加载图片并绘制
image = Image.open("example.png")
photo = ImageTk.PhotoImage(image)
canvas = tk.Canvas(child, width=image.width, height=image.height)
canvas.create_image(0, 0, anchor='nw', image=photo)
canvas.pack()
# 运行主循环
root.mainloop()
```
在这个例子中,我们首先创建了一个主窗口 `root`。然后,我们使用 `Toplevel()` 函数创建了一个子窗口 `child`。接着,我们使用Pillow库来加载一张图片,并将其转换为Tkinter的PhotoImage对象。最后,我们使用Canvas小部件将图片绘制在子窗口上,并运行主循环。
这个例子只是一个简单的示例,你可以根据需要对代码进行修改和扩展。
相关问题
tkinter 创建多窗口
要在tkinter中创建多个窗口,可以使用Tk()函数创建主窗口,然后使用Toplevel()函数创建额外的子窗口。首先,需要导入tkinter库并创建一个Tk()对象作为主窗口。然后,可以使用Toplevel()函数创建子窗口,并使用该子窗口进行进一步的界面设计和操作。引用提供了一个简单的对话框的示例代码,可以参考其中的使用方法。引用也提供了关于创建子窗口和在窗口上绘制图片的实例代码,可以进一步参考。要注意的是,在创建子窗口时,需要将Tk()对象作为参数传递给Toplevel()函数,以确保子窗口与主窗口关联。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [Python基于tkinter的GUI编程讲座](https://blog.csdn.net/cnds123/article/details/108290158)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* [python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例](https://download.csdn.net/download/weixin_38571453/12854656)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
python涂鸦tkinter
### Python Tkinter 绘制涂鸦示例
#### 创建基本窗口并初始化画布
为了实现一个简单的涂鸦应用,首先需要创建一个基础的Tkinter窗口,并在其上放置一个`Canvas`组件用于绘图操作。
```python
import tkinter as tk
def main():
root_window = tk.Tk()
root_window.title('Tkinter Drawing Demo')
root_window.geometry('800x600')
canvas = tk.Canvas(root_window, bg='white', width=700, height=500)
canvas.pack()
last_x, last_y = None, None
def draw(event):
nonlocal last_x, last_y
if last_x and last_y:
canvas.create_line(last_x, last_y, event.x, event.y, fill="black", width=2)
last_x = event.x
last_y = event.y
def reset_coords(event):
nonlocal last_x, last_y
last_x, last_y = None, None
canvas.bind("<B1-Motion>", draw) # 鼠标左键按下移动事件绑定到draw函数
canvas.bind("<ButtonRelease-1>", reset_coords) # 左键释放重置坐标
root_window.mainloop()
if __name__ == "__main__":
main()
```
此段代码定义了一个名为`main()`的方法来设置GUI环境。通过调用`tk.Tk()`实例化主窗口对象[^1];接着配置窗口大小以及标题属性。随后,在该窗口内部添加了一张白色的画布(`Canvas`)作为绘画区域。最后设置了两个回调函数分别处理鼠标拖拽绘制线条的动作和点击结束后的状态清理工作。
#### 用户交互逻辑
当用户按住鼠标的左键并在屏幕上移动时会触发`<B1-Motion>`事件,此时程序将获取当前光标的X,Y位置参数并通过`create_line()`方法连接起始点与终点从而形成连续线段效果完成自由手写功能。一旦松开按钮,则执行`reset_coords()`清除临时存储的位置变量以便下一次新的轨迹记录不受影响。
阅读全文
相关推荐














