绝对位置小部件
Absolute Position Widgets
很困惑,我查看了多个其他堆栈溢出页面:
class launcherWidget( QMainWindow ) :
def __init__(self) :
QMainWindow.__init__(self)
self.setWindowTitle("Scouting Software Launcher")
#self.setGeometry(100, 100, 100, 100)
self.table = QTableWidget()
self.table.setColumnCount(3)
self.table.setHorizontalHeaderLabels(["Save Name", "Mod Date","Creation Date"])
self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
#self.layout = QHBoxLayout()
#self.layout.addWidget(self.table)
#self.setLayout(self.layout)
self.table.setSelectionBehavior(QAbstractItemView.SelectRows)
self.table.verticalHeader().setVisible(False)
self.fill_table_with_list([["savename","mod date","creat"],["c","b","a"]])
#self.table.resize(100,100)
self.table.setGeometry( QRect( 50, 50, 100, 100 ) )
#self.table.move(50,50)
#self.show()
self.b0 = QPushButton("New")
self.b0.clicked.connect(self.newClicked)
#self.layout.addWidget(self.b0,)
#self.b0.move(0,0)
self.b1 = QPushButton("Rename")
self.b1.clicked.connect(self.renameClicked)
#self.layout.addWidget(self.b1)
#self.b1.move(300,500)
def newClicked(self) :
print("placeholder")
def renameClicked(self):
r = self.table.currentRow()
savename = str( self.table.item(r,0).text() )
def fill_table_with_list (self, data=[[]]) :
for row in reversed(data) :
saveName = QTableWidgetItem(row[0])
modDate = QTableWidgetItem(row[1])
creaDate =QTableWidgetItem(row[2])
self.table.insertRow(0)
self.table.setItem(0, 0, saveName)
self.table.setItem(0, 1, modDate)
self.table.setItem(0, 2, creaDate)
@Slot()
def exit_app(self, checked):
QApplication.quit()
def onLaunch () :
app = QApplication(sys.argv)
window = launcherWidget() # screen = before change
#window.resize(500, 300) #can always be fullscreened
window.resize(1820,980)
window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
onLaunch()
尝试使用绝对定位,但我无法显示我的 table,我得到的只是一个空白 window,里面什么也没有。我宁愿不必使用布局,但到目前为止,这似乎是显示 table 和按钮的唯一方法。我注释掉的所有内容都是试图让它发挥作用。 table.show() 似乎只是在单独的 window 中显示 table。 .move() 似乎什么都不做,最近尝试了 setGeometry() 也不起作用。我什至还没有尝试让按钮显示出来,我无法想象我会得到不同的结果。我一开始以为我的坐标错了,但我经过反复试验排除了那个错误
TL; DR; 作为小部件的父级传递给 window
如果一个小部件是另一个小部件的子部件,则它被绘制在另一个小部件上,在您的情况下既不是 QTableWidget 也不是 QPushButton,在布局的情况下,除了处理位置和大小之外,它们还建立为它所处理的widget到它所安顿的widget。
class launcherWidget(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.setWindowTitle("Scouting Software Launcher")
self.table = QTableWidget(<b>self</b>)
self.table.setColumnCount(3)
self.table.setHorizontalHeaderLabels(["Save Name", "Mod Date", "Creation Date"])
self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.table.setSelectionBehavior(QAbstractItemView.SelectRows)
self.table.verticalHeader().setVisible(False)
self.fill_table_with_list([["savename", "mod date", "creat"], ["c", "b", "a"]])
self.table.setGeometry(QRect(50, 50, 100, 100))
self.b0 = QPushButton("New", <b>self</b>)
self.b0.clicked.connect(self.newClicked)
self.b0.move(0,0)
self.b1 = QPushButton("Rename", <b>self</b>)
self.b1.clicked.connect(self.renameClicked)
self.b1.move(300,500)
# ...
很困惑,我查看了多个其他堆栈溢出页面:
class launcherWidget( QMainWindow ) :
def __init__(self) :
QMainWindow.__init__(self)
self.setWindowTitle("Scouting Software Launcher")
#self.setGeometry(100, 100, 100, 100)
self.table = QTableWidget()
self.table.setColumnCount(3)
self.table.setHorizontalHeaderLabels(["Save Name", "Mod Date","Creation Date"])
self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
#self.layout = QHBoxLayout()
#self.layout.addWidget(self.table)
#self.setLayout(self.layout)
self.table.setSelectionBehavior(QAbstractItemView.SelectRows)
self.table.verticalHeader().setVisible(False)
self.fill_table_with_list([["savename","mod date","creat"],["c","b","a"]])
#self.table.resize(100,100)
self.table.setGeometry( QRect( 50, 50, 100, 100 ) )
#self.table.move(50,50)
#self.show()
self.b0 = QPushButton("New")
self.b0.clicked.connect(self.newClicked)
#self.layout.addWidget(self.b0,)
#self.b0.move(0,0)
self.b1 = QPushButton("Rename")
self.b1.clicked.connect(self.renameClicked)
#self.layout.addWidget(self.b1)
#self.b1.move(300,500)
def newClicked(self) :
print("placeholder")
def renameClicked(self):
r = self.table.currentRow()
savename = str( self.table.item(r,0).text() )
def fill_table_with_list (self, data=[[]]) :
for row in reversed(data) :
saveName = QTableWidgetItem(row[0])
modDate = QTableWidgetItem(row[1])
creaDate =QTableWidgetItem(row[2])
self.table.insertRow(0)
self.table.setItem(0, 0, saveName)
self.table.setItem(0, 1, modDate)
self.table.setItem(0, 2, creaDate)
@Slot()
def exit_app(self, checked):
QApplication.quit()
def onLaunch () :
app = QApplication(sys.argv)
window = launcherWidget() # screen = before change
#window.resize(500, 300) #can always be fullscreened
window.resize(1820,980)
window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
onLaunch()
尝试使用绝对定位,但我无法显示我的 table,我得到的只是一个空白 window,里面什么也没有。我宁愿不必使用布局,但到目前为止,这似乎是显示 table 和按钮的唯一方法。我注释掉的所有内容都是试图让它发挥作用。 table.show() 似乎只是在单独的 window 中显示 table。 .move() 似乎什么都不做,最近尝试了 setGeometry() 也不起作用。我什至还没有尝试让按钮显示出来,我无法想象我会得到不同的结果。我一开始以为我的坐标错了,但我经过反复试验排除了那个错误
TL; DR; 作为小部件的父级传递给 window
如果一个小部件是另一个小部件的子部件,则它被绘制在另一个小部件上,在您的情况下既不是 QTableWidget 也不是 QPushButton,在布局的情况下,除了处理位置和大小之外,它们还建立为它所处理的widget到它所安顿的widget。
class launcherWidget(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.setWindowTitle("Scouting Software Launcher")
self.table = QTableWidget(<b>self</b>)
self.table.setColumnCount(3)
self.table.setHorizontalHeaderLabels(["Save Name", "Mod Date", "Creation Date"])
self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.table.setSelectionBehavior(QAbstractItemView.SelectRows)
self.table.verticalHeader().setVisible(False)
self.fill_table_with_list([["savename", "mod date", "creat"], ["c", "b", "a"]])
self.table.setGeometry(QRect(50, 50, 100, 100))
self.b0 = QPushButton("New", <b>self</b>)
self.b0.clicked.connect(self.newClicked)
self.b0.move(0,0)
self.b1 = QPushButton("Rename", <b>self</b>)
self.b1.clicked.connect(self.renameClicked)
self.b1.move(300,500)
# ...