import sys
from qtpy.QtWidgets import QApplication, QMainWindow
from qtpy import uic
from qtpy.QtNetwork import QTcpServer
Ui_MainWindow, _ = uic.loadUiType("form.ui")
class MyWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
Ui_MainWindow.__init__(self)
self.setupUi(self)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec())
代码是这个样子的 ui布局是
不清楚问题出在哪里 第一次使用qtpy 一定要通过代码实现布局吗
求解答
要求:
1、创建一个窗口, 设置尺寸为500 x 500, 位置为 300, 300
2、通过给定的的个数, 在该窗口内创建相应个数的子控件
3、 给定一列子控件的个数,让所有子控件在窗口均匀排列
4、假设有50个子控件,一列排4个
代码:
window2 = QWidget()
window2.resize(500, 500)
window2.move(300, 300)
# 先让父窗口显示,这样计算出来的width 和 height才准确
window2.show()
# 总的控件个数
widget_count = 50
# 一行有多少列
column_count = 4
# 计算一个控件的宽度
widget_width = window2.width() / column_count
# 总共有多少行 (编号 // 一行多少列 + 1)
row_count = (widget_count -1) // column_count + 1
# 计算一个控件的高度
widget_height = window2.height() / row_count
# 创建控件,并设置每个控件的位置
for i in range(0, widget_count):
w = QWidget(window2)
# 设置子控件大小
w.resize(widget_width, widget_height)
# 设置子控件坐标
widget_x = i % column_count * widget_width
widget_y = i // column_count * widget_height
w.move(widget_x, widget_y)
# 设定子控件背景颜色及边框颜色
w.setStyleSheet("background-color: red;border: 1px solid yellow;")
# 显示子控件,因父控件已显示(已绘制),如不手动设置子控件显示,将看不到子控件
w.show()
解析:
1、这里注意父窗口的show()方法使用的位置及让每个子控件再调用show()方法的意义。
2、注意子控件需排列的行数计算方法。
效果图: