Проблемы с созданием окна Tkinter в программе - PullRequest
0 голосов
/ 29 апреля 2019

frame = Frame(root, width=300, height=250) неправильно создает окно Tkinter. Не могли бы вы найти проблему и сказать мне, что это такое. Если это поможет, у меня есть остальная часть кода.

def clicking_pad(worker_1):
    root = Tk()

    global left_click

    def left_click(store: object) -> object:
        return store

    global right_click

    def right_click(store: object) -> object:
        return store

    frame = Frame(root, width=300, height=250)
    frame.bind("<Button-1>", left_click("GO"))
    frame.bind("<Button-2>", right_click("STOP"))

    frame.pack()

    root.mainloop()

    return right_click == right_click(store)

1 Ответ

1 голос
/ 29 апреля 2019

Как сказал Брайан Оукли, ваш код создает Frame без проблем.
Я также не знаю, что вы подразумеваете под "неправильным созданием окна Tkinter".

Как сказал acw1668, у вас есть ошибкив коде:

  1. вы не можете использовать одно и то же имя для переменной и функции - left_click, right_click
  2. bind() (аналогично command= и after()) нужно имя функции - значит без ().Это называется «обратный вызов».Если вам нужно использовать функцию с аргументами, вы можете создать функцию без аргументов, которая запускает вашу функцию с аргументом.Вы также можете использовать lambda для создания этой функции непосредственно в bind()
  3. bind(), но не можете получить результат из функции, поэтому вместо использования return вам нужно присвоить результат переменной global итогда вы можете получить его вне функции.

И мои очки:

  1. <Button-2> это средняя кнопка, <Button-3> это правая кнопка.
  2. bind() ожидает обратного вызова, который получает один параметр - event

.

import tkinter as tk

def clicking_pad(worker_1):
    global left_click
    global right_click

    def on_left_click(store: object) -> object:
        #return store
        global left_click
        left_click = store
        print('[INSIDE] left_click:', left_click)

    def on_right_click(store: object) -> object:
        #return store
        global right_click
        right_click = store
        print('[INSIDE] right_click:', right_click)

    root = tk.Tk()

    frame = tk.Frame(root, width=300, height=250)
    frame.pack()

    frame.bind("<Button-1>", lambda event:on_left_click("GO"))
    frame.bind("<Button-3>", lambda event:on_right_click("STOP"))

    root.mainloop()

    print('[OUTSIDE] left_click:', left_click)
    print('[OUTSIDE] right_click:', right_click)

clicking_pad(None)    

РЕДАКТИРОВАНИЕ: Без lambda

def on_button_1(event):
    on_left_click("GO")

def on_button_3(event):
    on_right_click("STOP")

frame.bind("<Button-1>", on_button_1)
frame.bind("<Button-3>", on_button_3)

или если ваша функция возвращает значение

def on_button_1(event):
    global result 
    result = on_left_click("GO")

def on_button_3(event):
    global result 
    result = on_right_click("STOP")

frame.bind("<Button-1>", on_button_1)
frame.bind("<Button-3>", on_button_3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...