【问题标题】:Controlling IP Cameras with Tkinter Buttons (Python)使用 Tkinter 按钮控制 IP 摄像机 (Python)
【发布时间】:2020-07-24 18:49:25
【问题描述】:

我一直在尝试使用 tkinter 创建一个 GUI,以使用 Python 控制 4 个 IP 摄像机。起初我以为是因为我没有正确的 IP 或端口,但我使用了数据包发送器来检查它。当我尝试在 Python 2.7 中使用该程序时,我对为什么该程序无法运行感到困惑。下面是我的一台摄像机的代码 - 左摄像机,它是一台 PTZoptics 摄像机。相机和计算机都通过以太网连接在一个网络上。目前,我正在使用 IP 操纵杆控制它们。

import socket
import tkinter as tk


class Example(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
        self.up = tk.Button(self, text="LEFT CAMERA UP")

        self.down = tk.Button(self, text="LEFT CAMERA DOWN")

        self.left = tk.Button(self, text="LEFT CAMERA LEFT")

        self.right = tk.Button(self, text="LEFT CAMERA RIGHT")

        self.up.pack(side="top")

        self.down.pack(side="bottom")

        self.left.pack(side="left")

        self.right.pack(side="right")

        self.up.bind("<ButtonPress>", self.on_LCup)
        self.up.bind("<ButtonRelease>", self.on_LCrelease)

        self.down.bind("<ButtonPress>", self.on_LCdown)
        self.down.bind("<ButtonRelease>", self.on_LCrelease)

        self.left.bind("<ButtonPress>", self.on_LCleft)
        self.left.bind("<ButtonRelease>", self.on_LCrelease)

        self.right.bind("<ButtonPress>", self.on_LCright)
        self.right.bind("<ButtonRelease>", self.on_LCrelease)

    def on_LCup(self, event):
        LeftHost = '10.30.1.41'
        port1 = 5678

        LC = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        LC.connect((LeftHost, port1))
        LC.send("81 01 06 01 08 08 03 01 FF")

    def on_LCdown(self, event):
        LeftHost = '10.30.1.41'
        port1 = 5678

        LC = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        LC.connect((LeftHost, port1))
        LC.send("81 01 06 01 08 08 03 02 FF")


    def on_LCleft(self, event):
        LeftHost = '10.30.1.41'
        port1 = 5678

        LC = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        LC.connect((LeftHost, port1))
        LC.send("81 01 06 01 08 08 01 03 FF")

    def on_LCright(self, event):
        LeftHost = '10.30.1.41'
        port1 = 5678

        LC = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        LC.connect((LeftHost, port1))
        LC.send("81 01 06 01 08 08 02 03 FF")

    def on_LCrelease(self, event):
        LeftHost = '10.30.1.41'
        port1 = 5678

        LC = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        LC.connect((LeftHost, port1))
        LC.send("81 01 06 01 08 08 03 03 FF")


if __name__ == "__main__":
    root = tk.Tk()
    Example(root).pack(side="top", fill="both", expand=True)
    root.mainloop()

【问题讨论】:

  • 这段代码有什么作用?相机是否转向错误的方向?错误的相机转向正确的方向吗?程序会崩溃吗?还有什么?
  • 此代码打开一个窗口,显示四个按钮(上、下、左和右)。按钮不做任何事情。没有错误消息,但是,我在输入 IP 命令之前使用“按下按钮”消息测试了按钮,并且效果很好。我的主要问题是试图通过 IP 将 VISCA 命令发送到摄像机,我什至无法让它在 python 终端中工作。
  • 在 Python 2 下,应使用Tkinter 而不是tkinter。我想知道为什么您的代码使用 Python 2 运行。
  • 我认为你给摄像头发送了错误的信息,例如"81 01 06 01 08 08 03 01 FF"应该是b"\x81\x01\x06\x01\x08\x08\x03\x01\xFF"
  • 试过了,没有骰子。

标签: python tkinter camera ip controls


【解决方案1】:

在 LC.send:: 中添加 --> bytes.fromhex LC.send(bytes.fromhex("81 01 06 01 08 08 03 03 FF"))

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-14
相关资源
最近更新 更多