将带有.ui的.py程序转换为工作的.exe

时间:2018-01-04 21:48:56

标签: python pyqt5 pyinstaller

我写了一个密码生成器并通过PyQt5设计器为它构建了一个GUI。实际脚本在其启动器中调用.ui,如果调用python程序和.ui文件都在同一目录中,一切正常。

def __init__(self, parent=None):
    super().__init__(parent)
    self.ui = uic.loadUi('Generator.ui', self)

所以我将调用.py程序( Generator.py )和 Generator-GUI.ui 放在一个文件夹中,并通过PyInstaller将Generator.py转换为一个.exe程序。 但是,如果我从dist文件夹中执行创建的.exe数据,则只会弹出一个控制台并立即关闭。

有没有办法让这项工作或者我必须手动将整个GUI代码写入 Generator.py

谢谢

1 个答案:

答案 0 :(得分:1)

我做了一个答案,我可以展示一个例子。使用pyuic工具将.ui文件转换为.py文件。这个创建的.py文件中会有一个类,它是Qt Designer中构建的小部件的名称。将此类导入并子类化到您正在创建的GUI类中。

df <- structure(list(test = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 
2L, 2L, 2L), .Label = c("AA", "BB"), class = "factor"), group = c(0L, 
0L, 1L, 1L, 0L, 0L, 1L, 1L, 2L, 2L), Value_1 = c(15.1, 12.4, 
9.6, 10.2, 12.11, 14, 11, 12.3, 14.2, 15), Value_2 = c(11.2, 
8.6, 22.5, 22, 11, 1.2, 13.2, 9, 12, 13)), .Names = c("test", 
"group", "Value_1", "Value_2"), class = "data.frame", row.names = c(NA, 
-10L))

as.data.frame(
  do.call(rbind, by(df, factor(df$test), function(x) {
  h <- t(combn(unique(x$group), 2))
  p <- apply(h, 1, function(y) {
    with(x[x$group %in% y, ], {
      c(oneway.test(Value_1 ~ group)$p.value,
        oneway.test(Value_2 ~ group)$p.value)
      })
    })

  h <- rep(paste(h[, 1], h[, 2], sep = ","), each = 2)

  cbind(test = as.character(x$test[1]), value = c("Value_1", "Value_2"), p_value = as.vector(p), hypothesis = h)
  }))
)


  test   value            p_value hypothesis
1   AA Value_1  0.201123366107666        0,1
2   AA Value_2 0.0585402590546805        0,1
3   BB Value_1  0.358541470571387        0,1
4   BB Value_2  0.484844587956832        0,1
5   BB Value_1  0.324601180998953        0,2
6   BB Value_2  0.414283756097153        0,2
7   BB Value_1 0.0810540380817137        1,2
8   BB Value_2  0.624571310834221        1,2