豆豆111 发表于 2020-6-30 10:00:11

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

类似于window照片查看器的格式

阴阳神万物主 发表于 2020-6-30 21:35:47

几乎所有窗口的库都能做到图片查看器的样子。

豆豆111 发表于 2020-7-1 15:28:26

阴阳神万物主 发表于 2020-6-30 21:35
几乎所有窗口的库都能做到图片查看器的样子。

可是子窗口只能在父窗口上上移动这个还得自己写吧

yhhpf 发表于 2020-7-1 15:34:43

tkinter不就可以么~

豆豆111 发表于 2020-7-1 15:36:31

豆豆111 发表于 2020-7-1 15:28
可是子窗口只能在父窗口上上移动这个还得自己写吧

谢谢你呀,我还是刚入门的小白,现在用的cv2库

豆豆111 发表于 2020-7-1 15:39:03

yhhpf 发表于 2020-7-1 15:34
tkinter不就可以么~

谢谢你呀,我现在就用的tkinter,可是Toplevel这个子窗口能移动的区域太大,想把它的活动范围限制在主窗口

yhhpf 发表于 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()

在父窗口范围内移动我是不知道...如果是一直显示在父窗口上的话可以参考下上面的;

豆豆111 发表于 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语句就陷入死循环,特别郁闷,不知哪出问题了

豆豆111 发表于 2020-7-1 16:59:50

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

忘前辈指教

豆豆111 发表于 2020-7-1 17:00:38

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

麻烦前辈指教

yhhpf 发表于 2020-7-1 17:20:22

本帖最后由 yhhpf 于 2020-7-1 17:22 编辑

豆豆111 发表于 2020-7-1 17:00
麻烦前辈指教

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()

我也顺带学习了下,按你思路,改了下代码{:10_256:}
最好加个弹框提示~~~

豆豆111 发表于 2020-7-1 18:03:32

yhhpf 发表于 2020-7-1 17:20
我也顺带学习了下,按你思路,改了下代码
最好加个弹框提示~~~

相互学习https://fishc.com.cn/static/image/smiley/comcom/3.gif

yhhpf 发表于 2020-7-1 18:13:16

豆豆111 发表于 2020-7-1 18:03
相互学习https://fishc.com.cn/static/image/smiley/comcom/3.gif

{:10_281:}反正都回答了,顺便给个最佳吧,哈哈哈哈
页: [1]
查看完整版本: python利用哪个库可以创建父子窗口显示图片,同时创建销毁,子窗口只能在父窗口上移动