鱼C论坛

 找回密码
 立即注册
查看: 1761|回复: 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

反正都回答了,顺便给个最佳吧,哈哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-30 21:35:47 | 显示全部楼层
几乎所有窗口的库都能做到图片查看器的样子。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

可是子窗口只能在父窗口上上移动这个还得自己写吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-1 15:34:43 | 显示全部楼层
tkinter不就可以么~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢你呀,我还是刚入门的小白,现在用的cv2库
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢你呀,我现在就用的tkinter,可是Toplevel这个子窗口能移动的区域太大,想把它的活动范围限制在主窗口
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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


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

mainloop()

在父窗口范围内移动我是不知道...如果是一直显示在父窗口上的话可以参考下上面的;
想知道小甲鱼最近在做啥?请访问 -> 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语句就陷入死循环,特别郁闷,不知哪出问题了
想知道小甲鱼最近在做啥?请访问 -> 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 ...

忘前辈指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

麻烦前辈指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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+10, d))
    elif c >= (a + 200):
        popWindow.geometry('{}x{}+{}+{}'.format(200, 200, a+190, d))
    else:
        c = popWindow.winfo_x()
    if d <= b:
        popWindow.geometry('{}x{}+{}+{}'.format(200, 200, c, b+10))
    elif d >= (b + 200):
        popWindow.geometry('{}x{}+{}+{}'.format(200, 200, c, b+190))
    else:
        d = popWindow.winfo_y()
popWindow.bind("<Configure>",change)
root.mainloop()

我也顺带学习了下,按你思路,改了下代码
最好加个弹框提示~~~
想知道小甲鱼最近在做啥?请访问 -> 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

反正都回答了,顺便给个最佳吧,哈哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 03:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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