Сравните две строковые переменные, сделайте что-нибудь, если они одинаковые - PullRequest
0 голосов
/ 25 января 2019

Я хочу сравнить две строковые переменные в Python и вывести same, если они совпадают.К сожалению, я не могу заставить это работать, same никогда не печатается.Одна из моих строк - просто простая переменная, а другая - вывод RGB из модуля ImageGrab.

Вот код:

from PIL import ImageGrab
import threading

cc = "(255, 255, 255)"

def getcol():
    global pxcolor
    threading.Timer(0.5, getcol).start()
    pixel=ImageGrab.grab((960,540,961,541)).load()
    for y in range(0,1,1):
        for x in range(0,1,1):
            pxcolor=pixel[x,y]
            print(pxcolor)
            if pxcolor == cc:
                print("same")

getcol()

Я пытался использовать pxcolor = pxcolor.strip() но это вернуло эту ошибку:

Exception in thread Thread-2:
Traceback (most recent call last):
  File "C:\Users\mikur\Python\Python37-32\lib\threading.py", line 917, in _bootstrap_inner
    self.run()
  File "C:\Users\mikur\Python\Python37-32\lib\threading.py", line 1158, in run
    self.function(*self.args, **self.kwargs)
  File "C:\Users\mikur\Desktop\tye.py", line 14, in getcol
    pxcolor = pxcolor.strip()
AttributeError: 'tuple' object has no attribute 'strip'

Ответы [ 2 ]

0 голосов
/ 25 января 2019

cc - это строка, тогда как pxcolor - это кортеж

Вам нужно либо заменить cc на кортеж, либо pxcolor на строку, а затем проверить оператор ==:

Кортеж в строку

from PIL import ImageGrab
import threading

cc = "(255, 255, 255)"

def getcol():
    global pxcolor
    threading.Timer(0.5, getcol).start()
    pixel=ImageGrab.grab((960,540,961,541)).load()
    for y in range(0,1,1):
        for x in range(0,1,1):
            pxcolor=pixel[x,y]
            print(pxcolor)
            if str(pxcolor) == cc:
                print("same")

Строка в кортеж

from PIL import ImageGrab
import threading


cc = "(255, 255, 255)"

def getcol():
    global pxcolor
    threading.Timer(0.5, getcol).start()
    pixel=ImageGrab.grab((960,540,961,541)).load()
    for y in range(0,1,1):
        for x in range(0,1,1):
            pxcolor=pixel[x,y]
            print(pxcolor)

            elements = cc[1:-1].split(",")
            tuple_cc = [ int(x) for x in elements ]
            mytuple = tuple(tuple_cc) 

            if pxcolor == mytuple:
                print("same")
0 голосов
/ 25 января 2019

Просто нужно преобразовать pxcolor в строку через str (), чтобы сравнить их

from PIL import ImageGrab
import threading

cc = "(45, 42, 46)"

def getcol():
    global pxcolor
    threading.Timer(0.5, getcol).start()
    pixel=ImageGrab.grab((960,540,961,541)).load()
    for y in range(0,1,1):
        for x in range(0,1,1):
            pxcolor=str(pixel[x,y])
            print(pxcolor)
            if pxcolor == cc:
                print("same")

getcol()

В соответствии с предложением Кевина сделать переменную cc кортежем в начале

from PIL import ImageGrab
import threading

cc = (45, 42, 46)

def getcol():
    global pxcolor
    threading.Timer(0.5, getcol).start()
    pixel=ImageGrab.grab((960,540,961,541)).load()
    for y in range(0,1,1):
        for x in range(0,1,1):
            pxcolor=pixel[x,y]
            print(pxcolor)
            if pxcolor == cc:
                print("same")

getcol()
...