Saya menulis kode ini dan saya tidak mengerti mengapa widget QLabel dan QLineEdit tidak muncul? Apakah saya harus menempatkan mereka di kelas lain? Ini Python2.7 dan PySide.
Ini adalah tampilan jendela ketika saya menjalankan kode:
#!/usr/bin/env python
# coding: utf-8
import sys
import crypt
from PySide import QtGui
class MyApp(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MyApp, self).__init__(parent)
self.initui()
def initui(self):
# main window size, title and icon
self.setMinimumSize(500, 350)
self.setWindowTitle("Calculate a password hash in Linux")
# lines for entering data
self.saltLabel = QtGui.QLabel("Salt:")
self.saltLine = QtGui.QLineEdit()
self.saltLine.setPlaceholderText("e.g. $6$xxxxxxxx")
# set layout
grid = QtGui.QGridLayout()
grid.addWidget(self.saltLabel, 0, 0)
grid.addWidget(self.saltLine, 1, 0)
self.setLayout(grid)
# show a widget
self.show()
def main():
app = QtGui.QApplication(sys.argv)
instance = MyApp()
instance.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
-1
Hrvoje T
24 Mei 2016, 11:14
1 menjawab
Jawaban Terbaik
Bagaimana kalau menggunakan QWidget
sebagai centralWidget
widget = QWidget()
widget.setLayout(grid)
#add your widgets and...
self.setCentralWidget(widget)
Dan Anda tidak perlu memanggil show()
karena Anda melakukannya di __main__
Terserah pemiliknya, tetapi saya akan merekomendasikan sublasasi QWidget
dan biarkan instance QMainWindow
Anda sesingkat mungkin. Sebuah implementasi dapat berupa:
class MyWidget(QtGui.QWidget):
def __init__(self, *args):
QtGui.QWidget.__init__(self, *args)
grid = QtGui.QGridLayout()
#and so on...
Dan gunakan ini sebagai widget
dalam instance QMainWindow
Anda. Ini sangat meningkatkan keterbacaan dan pemeliharaan dan dapat digunakan kembali :)
2
tobilocker
24 Mei 2016, 11:40
Ok, ketika saya melakukan itu (sendiri bukan ini), widget memang muncul tetapi di sudut kiri atas, satu di atas yang lain. Namun, saya mengganti QMainWindow dengan QWidget dan sekarang tidak masalah. Terima kasih!
– Hrvoje T
24 Mei 2016, 11:38
1
Apakah Anda mencoba jawaban yang diperbarui?
– setCentralWidget
harus mengisi instance QMainWindow
Anda. Terus perbarui saya jika Anda tidak ingin contoh atas berfungsi. Saya dapat memberikan jawaban yang lebih rinci juga.
tobilocker
24 Mei 2016, 11:45
Saya menyimpan QMainWindow, menambahkan widget QLabel dan QLineEdit di grid dan mengatur widget sebagai centrawidged di QMainWindow. Ini bekerja, terima kasih!
– Hrvoje T
24 Mei 2016, 12:16
QMainWindow
. Anda harus menggunakanQDialog
atauQWidget
.