鱼C论坛

 找回密码
 立即注册
查看: 1912|回复: 12

[已解决]python利用哪个库可以创建父子窗口显示图片,同时创建销毁,子窗口只能在父窗口上移动

[复制链接]
发表于 2020-6-30 10:00:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
类似于window照片查看器的格式
最佳答案
2020-7-1 18:13:16
豆豆111 发表于 2020-7-1 18:03
相互学习https://fishc.com.cn/static/image/smiley/comcom/3.gif

反正都回答了,顺便给个最佳吧,哈哈哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-30 21:35:47 | 显示全部楼层
几乎所有窗口的库都能做到图片查看器的样子。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-1 15:28:26 | 显示全部楼层
阴阳神万物主 发表于 2020-6-30 21:35
几乎所有窗口的库都能做到图片查看器的样子。

可是子窗口只能在父窗口上上移动这个还得自己写吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-1 15:34:43 | 显示全部楼层
tkinter不就可以么~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-1 15:36:31 | 显示全部楼层
豆豆111 发表于 2020-7-1 15:28
可是子窗口只能在父窗口上上移动这个还得自己写吧

谢谢你呀,我还是刚入门的小白,现在用的cv2库
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-1 15:39:03 | 显示全部楼层
yhhpf 发表于 2020-7-1 15:34
tkinter不就可以么~

谢谢你呀,我现在就用的tkinter,可是Toplevel这个子窗口能移动的区域太大,想把它的活动范围限制在主窗口
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-1 16:12:42 | 显示全部楼层
豆豆111 发表于 2020-7-1 15:39
谢谢你呀,我现在就用的tkinter,可是Toplevel这个子窗口能移动的区域太大,想把它的活动范围限制在主窗 ...
  1. from tkinter import *

  2. root = Tk()
  3. root.geometry('400x600')

  4. def create():
  5.     top = Toplevel(root)
  6.     top.title("顶层窗口")
  7.     top.geometry('100x100')
  8.     top.attributes("-toolwindow", 1)
  9.     top.wm_attributes("-topmost", 1)
  10.     msg = Message(top, text="我只是个顶层窗口")
  11.     msg.pack()


  12. Button(root, text="创建顶层窗口", command=create).pack()

  13. mainloop()
复制代码


在父窗口范围内移动我是不知道...如果是一直显示在父窗口上的话可以参考下上面的;
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-1 16:48:21 | 显示全部楼层
yhhpf 发表于 2020-7-1 16:12
在父窗口范围内移动我是不知道...如果是一直显示在父窗口上的话可以参考下上面的;

import tkinter as tk    # 导入Tkinter模块,仅用于Python3
root = tk.Tk()   # 建立Tkinter主窗口root
root.title(' Tk窗口')
root.geometry('{}x{}+{}+{}'.format(400, 400, 200, 200))  # 改变窗口位置和大小
root.attributes('-topmost', 0)   # 参数1,设置顶层窗口,覆盖其它窗口。
# separator = tk.Frame(height=100, bd=1, relief="sunken")
# separator.pack(fill="x", padx=5, pady=5)
# tk.Label(text="小鸡炖蘑菇").pack()

popWindow = tk.Toplevel(root)
popWindow.title('Toplevel窗口')
popWindow.geometry('{}x{}+{}+{}'.format(200, 200, 300, 300))  # 改变窗口大小和位置
popWindow.attributes("-toolwindow", 1)   # 参数1,设置工具栏样式窗口。
popWindow.attributes('-topmost', 1)   # 参数1,设置顶层窗口,覆盖其它窗口。
popWindow.attributes("-alpha", 0.5)
popWindow.resizable(width=False, height=False)  # Toplevel窗口不可以调整尺寸
popWindow.overrideredirect()   # 隐藏窗体工具栏
# popWindow.withdraw()
def change(event):
    global a, b, c, d
    root.update()
    a = root.winfo_x()
    b = root.winfo_y()
    print("(窗口位置被移动)窗口位于屏幕xxx轴:" + str(a))
    print("(窗口位置被移动)窗口位于屏幕y轴:" + str(b))
    root.bind("<Configure>", change)  # 绑定事件
    popWindow.update()
    c = popWindow.winfo_x()
    d = popWindow.winfo_y()
    print("(窗口位置被移动)窗口位于屏幕1111111111轴:" + str(c))
    print("(窗口位置被移动)窗口位于屏幕222222轴:" + str(d))
    if c <= a:
        popWindow.geometry('{}x{}+{}+{}'.format(200, 200, a, d))
    elif c >= (a + 200):
        popWindow.geometry('{}x{}+{}+{}'.format(200, 200, a+200, d))
    else:
        c = popWindow.winfo_x()
    if d <= b:
        popWindow.geometry('{}x{}+{}+{}'.format(200, 200, c, b))
    elif d >= (b + 200):
        popWindow.geometry('{}x{}+{}+{}'.format(200, 200, c, b+200))
    else:
        d = popWindow.winfo_y()
popWindow.bind("<Configure>",change)
root.mainloop()
我自己写了让子窗口只能在父窗口上移动的函数,可是只要子窗口碰到边界,if语句就陷入死循环,特别郁闷,不知哪出问题了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-1 16:59:50 | 显示全部楼层
豆豆111 发表于 2020-7-1 16:48
import tkinter as tk    # 导入Tkinter模块,仅用于Python3
root = tk.Tk()   # 建立Tkinter主窗口root ...

忘前辈指教
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-1 17:00:38 | 显示全部楼层
yhhpf 发表于 2020-7-1 16:12
在父窗口范围内移动我是不知道...如果是一直显示在父窗口上的话可以参考下上面的;

麻烦前辈指教
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-1 17:20:22 | 显示全部楼层
本帖最后由 yhhpf 于 2020-7-1 17:22 编辑

  1. import tkinter as tk    # 导入Tkinter模块,仅用于Python3
  2. root = tk.Tk()   # 建立Tkinter主窗口root
  3. root.title(' Tk窗口')
  4. root.geometry('{}x{}+{}+{}'.format(400, 400, 200, 200))  # 改变窗口位置和大小
  5. root.attributes('-topmost', 0)   # 参数1,设置顶层窗口,覆盖其它窗口。
  6. # separator = tk.Frame(height=100, bd=1, relief="sunken")
  7. # separator.pack(fill="x", padx=5, pady=5)
  8. # tk.Label(text="小鸡炖蘑菇").pack()

  9. popWindow = tk.Toplevel(root)
  10. popWindow.title('Toplevel窗口')
  11. popWindow.geometry('{}x{}+{}+{}'.format(200, 200, 300, 300))  # 改变窗口大小和位置
  12. popWindow.attributes("-toolwindow", 1)   # 参数1,设置工具栏样式窗口。
  13. popWindow.attributes('-topmost', 1)   # 参数1,设置顶层窗口,覆盖其它窗口。
  14. popWindow.attributes("-alpha", 0.5)
  15. popWindow.resizable(width=False, height=False)  # Toplevel窗口不可以调整尺寸
  16. popWindow.overrideredirect()   # 隐藏窗体工具栏
  17. # popWindow.withdraw()
  18. def change(event):
  19.     global a, b, c, d
  20.     root.update()
  21.     a = root.winfo_x()
  22.     b = root.winfo_y()
  23.     print("(窗口位置被移动)窗口位于屏幕xxx轴:" + str(a))
  24.     print("(窗口位置被移动)窗口位于屏幕y轴:" + str(b))
  25.     root.bind("<Configure>", change)  # 绑定事件
  26.     popWindow.update()
  27.     c = popWindow.winfo_x()
  28.     d = popWindow.winfo_y()
  29.     print("(窗口位置被移动)窗口位于屏幕1111111111轴:" + str(c))
  30.     print("(窗口位置被移动)窗口位于屏幕222222轴:" + str(d))
  31.     if c <= a:
  32.         popWindow.geometry('{}x{}+{}+{}'.format(200, 200, a+10, d))
  33.     elif c >= (a + 200):
  34.         popWindow.geometry('{}x{}+{}+{}'.format(200, 200, a+190, d))
  35.     else:
  36.         c = popWindow.winfo_x()
  37.     if d <= b:
  38.         popWindow.geometry('{}x{}+{}+{}'.format(200, 200, c, b+10))
  39.     elif d >= (b + 200):
  40.         popWindow.geometry('{}x{}+{}+{}'.format(200, 200, c, b+190))
  41.     else:
  42.         d = popWindow.winfo_y()
  43. popWindow.bind("<Configure>",change)
  44. root.mainloop()
复制代码


我也顺带学习了下,按你思路,改了下代码
最好加个弹框提示~~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-7-1 18:03:32 | 显示全部楼层
yhhpf 发表于 2020-7-1 17:20
我也顺带学习了下,按你思路,改了下代码
最好加个弹框提示~~~

相互学习https://fishc.com.cn/static/image/smiley/comcom/3.gif
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-1 18:13:16 | 显示全部楼层    本楼为最佳答案   
豆豆111 发表于 2020-7-1 18:03
相互学习https://fishc.com.cn/static/image/smiley/comcom/3.gif

反正都回答了,顺便给个最佳吧,哈哈哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-19 14:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表