Python ควบคุมจำนวนการเคลื่อนไหวของพิกเซลใน tkinter

posshift = 1
def scrollimage(event):
    if event.keysym =='Up':
            posshift = posshift + 1
    elif event.keysym == 'Down':
            posshift = posshift - 1
    elif event.keysym =='Left':
            canvas_1.move(ALL,15,0)
    elif event.keysym =='Right':
            canvas_1.move(ALL,-15,0)

ในโค้ดต่อไปนี้ ฉันกำลังพยายามให้กราฟิกบนหน้าจอเลื่อนไปทางซ้ายหรือขวาเป็นระยะทางหนึ่ง นั่นทำงานได้อย่างถูกต้อง สิ่งที่ฉันอยากให้เกิดขึ้นคือการมีมัน ดังนั้นเมื่อฉันกดลูกศรขึ้น มันจะเพิ่มปริมาณการเคลื่อนไหว (15 กลายเป็น 16, 17, 18, 19) ทั้งทางซ้ายและขวา และเมื่อฉันกดปุ่มลูกศรลง มันลดจำนวนการเคลื่อนไหว (15 กลายเป็น 14, 13, 12, 11) เมื่อฉันเปลี่ยน ALL, 15, 0 เป็น ALL, posshift, 0 ทั้งหมดที่ฉันได้รับคือข้อผิดพลาดในบรรทัดที่ posshift กำลังเพิ่มขึ้นก่อนที่จะถูกสร้างขึ้น ฉันได้สร้าง posshift ไว้หลังจากคำสั่งนำเข้าก่อนที่จะสร้างฟังก์ชัน ฉันต้องทำอย่างไรจึงจะเพิ่ม/ลดค่าของการเคลื่อนไหวได้เมื่อฉันกดปุ่มลูกศรซ้าย/ขวา ตอนนี้ฉันไม่ได้ใช้ Linux ซึ่งติดตั้ง python ไว้ดังนั้นฉันจึงไม่สามารถระบุข้อผิดพลาดที่เกิดขึ้นได้... ฉันจำส่วนแรกของบรรทัดข้อผิดพลาดที่ระบุว่า Unbound... ถ้ามันช่วยได้

ในคำถามที่คล้ายกันมาก...ฉันยอมรับว่ายังไม่ได้ลองเลย มันไม่โดนใจฉันเลยจนกระทั่งฉันเข้านอนเมื่อคืนนี้ และฉันก็ยังไม่ได้เปิดคอมพิวเตอร์อีกเลยจนกระทั่งตอนนี้ ฉันคิดว่าฉันจะถาม ก่อนอื่นต้องกังวลในภายหลัง ฉันจะอ้างอิงปุ่ม PageUp, PageDown, Home, End ได้อย่างไร ฉันจะต้องการให้พวกเขาแยกแนวคิดกันในโปรแกรมนี้ เร็วๆ นี้ อย่างเช่นคืนนี้ ฉันรู้ว่าฉันอาจจะต้องอ้างอิงทั้งคู่ในฟังก์ชันและ canvas.bind_all


person confused    schedule 27.12.2013    source แหล่งที่มา


คำตอบ (1)


ปัญหาของคุณที่นี่คือคุณกำลังพยายามผสมผสานการประกาศระดับโลกกับคำจำกัดความในท้องถิ่น นั่นจะไม่ทำงาน หากคุณเปลี่ยนรหัสของคุณเป็น

posshift = 1
def scrollimage(event):
    global posshift
    if event.keysym =='Up':
            posshift = posshift + 1
    elif event.keysym == 'Down':
            posshift = posshift - 1
    elif event.keysym =='Left':
            canvas_1.move(ALL,15,0)
    elif event.keysym =='Right':
            canvas_1.move(ALL,-15,0)

จากนั้นมันจะทำงาน

แม้ว่าในกรณีนี้คุณควรพิจารณาสร้างชั้นเรียน คุณสามารถทำสิ่งที่ชอบ:

class Image:
     def __init__(canvas):
         self.posshift = 1
         self.canvas = 1

     def move_left(self):
         self.canvas.move(ALL, self.posshift, 0)

     def move_right(self):
         self.canvas.move(ALL, -1*self.posshift, 0)

แน่นอนว่ายังมีอีกหลายวิธีในการบรรลุสิ่งที่คุณต้องการ นี่อาจเป็นหรือไม่ใช่วิธีที่ดีที่สุด

person Wayne Werner    schedule 27.12.2013