Ini adalah pertanyaan yang sangat sederhana. Saya baru mengenal PyQt5 dan saya agak bingung tentang cara kerja QGridLayout...

def init_main_page(self):
        layout = QGridLayout()

        b1 = buttons.QPushButton("0",self.main_page)
        b2 = buttons.QPushButton("1",self.main_page)
        b3 = buttons.QPushButton("2",self.main_page)

        layout.addWidget(b1,0,0)
        layout.addWidget(b2,5,0)
        layout.addWidget(b3,1,0)

        self.main_page.setLayout(layout)

Masalah yang saya alami adalah tidak peduli seberapa tinggi saya membuat argumen x dan y di addwidget(QWidget,x,y), b1 b2 dan b3 selalu tetap berjarak sama satu sama lain. Saya mencoba mencari cara untuk memanipulasi posisi tombol sambil mempertahankan pengaturan proporsional (jadi hindari QPushButton.move()) dan dari apa yang saya lihat, QGridLayout adalah cara terbaik untuk melakukan ini.

1
Henrique Lee 17 Juni 2020, 10:00

1 menjawab

Jawaban Terbaik

Menyetel koordinat widget dalam tata letak kotak dengan "melewati" baris atau kolom hampir tidak berguna, karena itu adalah koordinat kotak yang hanya memberi tahu pengelola tata letak di mana "slot" widget akan berada: karena tidak ada apa pun di baris 2 hingga 4, ruang itu tidak akan digunakan.

Untuk mencapai apa yang Anda inginkan, Anda perlu menyetel faktor peregangan dan , mungkin, gunakan ketinggian minimum untuk baris yang ditentukan.

    layout.addWidget(b1, 0, 0)
    layout.addWidget(b3, 1, 0)
    layout.addWidget(b2, 2, 0)
    layout.setRowStretch(2, 1)
    layout.setRowMinimumHeight(2, 50)

Tapi ini mungkin bukan yang Anda inginkan, karena ini akan menempatkan tombol ketiga di tengah vertikal kisi baris (meninggalkan ruang kosong di bagian bawah).

Untuk menghindarinya, ada dua kemungkinan solusi:

  • tambahkan widget dengan mengatur perataan ke bawah:

    layout.addWidget(b2, 2, 0, alignment=QtCore.Qt.AlignBottom)
    
  • tambahkan widget terakhir ke baris keempat, dan atur peregangan dan tinggi minimum untuk baris kosong ketiga.

        layout.addWidget(b2, 3, 0)
        layout.setRowStretch(2, 1)
        layout.setRowMinimumHeight(2, 50)
0
musicamante 17 Juni 2020, 13:06