Python mengontrol jumlah pergerakan piksel di 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)

Dalam kode berikut saya mencoba membuat grafik di layar bergerak pada jarak tertentu ke kiri atau ke kanan. Itu berfungsi dengan benar. Apa yang saya ingin wujudkan adalah ketika saya menekan panah Atas, jumlah gerakannya meningkat (15 menjadi 16, 17, 18, 19) di kiri dan kanan dan ketika saya menekan tombol panah Bawah itu mengurangi jumlah gerakan (15 menjadi 14, 13, 12, 11). Ketika saya mengubah ALL, 15, 0 menjadi ALL, posshift, 0 yang saya dapatkan hanyalah kesalahan sepanjang baris bahwa posshift sedang bertambah sebelum dibuat. Saya telah membuat posshift tepat setelah pernyataan import sebelum fungsi dibuat. Apa yang harus saya lakukan agar dapat menambah/mengurangi nilai gerakan ketika saya menekan tombol panah Kiri/Kanan. Saya tidak menggunakan Linux saat ini, di mana saya telah menginstal python jadi saya tidak bisa memberikan kesalahan persis yang muncul...Saya ingat bagian pertama dari baris kesalahan mengatakan Tidak Terikat...jika itu membantu.

Juga dalam pertanyaan yang sangat mirip...Saya rasa saya belum mencobanya, saya tidak menyadarinya sampai saya pergi tidur tadi malam dan saya belum kembali menggunakan komputer sampai sekarang jadi saya pikir saya akan bertanya pertama, khawatir nanti. Bagaimana cara mereferensikan tombol PageUp, PageDown, Home, End. Saya ingin mereka mendapatkan ide-ide terpisah juga dalam program ini, segera, mungkin seperti malam ini. Saya tahu saya mungkin harus mereferensikan keduanya dalam fungsi dan juga canvas.bind_all.


person confused    schedule 27.12.2013    source sumber


Jawaban (1)


Masalah Anda di sini adalah Anda mencoba menggabungkan deklarasi global dengan definisi lokal. Itu tidak akan berhasil. Jika Anda mengubah kode Anda menjadi

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)

Maka itu akan berhasil.

Meskipun dalam hal ini Anda mungkin harus mempertimbangkan untuk membuat kelas. Anda dapat melakukan sesuatu seperti:

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)

Tentu saja ada beberapa cara lain untuk mencapai apa yang Anda cari. Ini mungkin cara terbaik atau mungkin bukan.

person Wayne Werner    schedule 27.12.2013